Conditionally set an Apache environment variable
- by Tom McCarthy
I would like to conditionally set the value of an Apache2 environment variable and assign a default value if one of the conditions is not met.  This example if a simplification of what I'm trying to do but, in effect, if the subdomain portion of the host name is hr, finance or marketing I want to set an environment var named REQUEST_TYPE to 2, 3 or 4 respectively.  Otherwise it should be 1.  I tried the following configuration in httpd.conf:
<VirtualHost *:80>
  ServerName     foo.com
  ServerAlias    *.foo.com
  DocumentRoot   /var/www/html
  SetEnv REQUEST_TYPE 1
  SetEnvIfNoCase Host  ^hr\.         REQUEST_TYPE=2
  SetEnvIfNoCase Host  ^finance\.    REQUEST_TYPE=3
  SetEnvIfNoCase Host  ^marketing\.  REQUEST_TYPE=4
</VirtualHost>
However, the variable is always assigned a value of 1.  The only way I have so far been able get it to work is to replace:
      SetEnv REQUEST_TYPE 1
with a regular expression containing a negative lookahead:
      SetEnvIfNoCase Host  ^(?!hr.|finance.|marketing.)  REQUEST_TYPE=1
Is there a better way to assign the default value of 1?  As I add more subdomain conditions the regular expression could get ugly.  Also, if I want to allow another request attribute to affect the REQUEST_TYPE (e.g. if Remote_Addr = 192.168.1.[100-150] then REQUEST_TYPE = 5) then my current method of assigning a default value (i.e. using the regular expression with a negative lookahead) probaby won't work.