我想有条件地设置一个Apache2的环境variables的值,并分配一个默认值,如果其中一个条件不满足。 这个例子,如果我想要做的简化,但实际上,如果主机名的子域部分是小时,金融或市场营销我想设置一个名为REQUEST_TYPE的环境var分别为2,3或4。 否则它应该是1.我在httpd.conf中尝试了以下configuration:
<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>
但是,该variables始终赋值为1.我迄今为止能够使其工作的唯一方法是将SetEnv REQUEST_TYPE 1replace为包含负向前瞻的正则expression式:SetEnvIfNoCase Host ^(?! hr。|财务。|营销。)REQUEST_TYPE = 1
有没有更好的方法来分配默认值1? 由于我添加了更多的子域条件,或者如果我允许另一个请求属性影响REQUEST_TYPE(例如,如果Remote_Addr = 192.168.1。[100-150],那么REQUEST_TYPE = 5),具有负向前瞻的正则expression式可能变得难看又难pipe理。
所以看起来不可能重新分配一个环境variables。 但是你可以testing是否设置了variables,如果不是,则将其设置为默认值。
SetEnvIfNoCase Host ^hr\. REQUEST_TYPE=2 SetEnvIfNoCase Host ^finance\. REQUEST_TYPE=3 SetEnvIfNoCase Host ^marketing\. REQUEST_TYPE=4 SetEnvIf REQUEST_TYPE ^$ REQUEST_TYPE=1