In .htaccess files, is there any difference at all between “!=on” and “off”

tl;dr In this example, the net result is the same, but the pattern !=on is arguably more efficient because it is a lexicographical string comparison, not a regular expression. Unlike off, which is processed as a regex.

However, in real terms there is no measurable performance difference between these particular expressions. It's a matter a personal preference which one you choose. (You could also use !on instead.)


Apache’s use of a binary attribute...

This isn't strictly a "binary attribute". All Apache server variables contain strings. In the case of the HTTPS server variable, this is set to either the string "on" or "off" (always lowercase).

RewriteCond %{HTTPS} !=on 

(Note this has a different meaning to !on.)

  • The ! prefix (which can be prefixed to any condition) negates the result of the condition.

  • The important part here is the = operator. This changes the expression from being a regex comparison to a lexicographical string comparison for equality. The fact that it is no longer a regex is what arguably makes it "more efficient" (although in real terms, there is no measurable performance difference in this example). So, =on checks that the server variable HTTPS is exactly equal to "on". The ! prefix then negates the result. Whereas off checks that HTTPS contains the string "off" anywhere (the same as ^.*off.*$).

The comparable expression to !=on is really =off, not off (as in your example). And off is comparable to !on. The fact that you rarely see =off is just human nature, personal preference, habit, copy/paste, readability, misunderstanding (take your pick)?

In summary:

# Check if HTTPS is not exactly equal to "on" (lexicographical comparison)
RewriteCond %{HTTPS} !=on 

vs

# Check if HTTPS contains the string "off" anywhere (regex)
RewriteCond %{HTTPS} off