我想有条件地设置 Apache2 环境变量的值,并在其中一个条件不满足时分配默认值。此示例简化了我要执行的操作,但实际上,如果主机名的子域部分是 hr、finance 或 marketing,我想分别将名为 REQUEST_TYPE 的环境变量设置为 2、3 或 4。否则应该是 1。我在 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>
但是,该变量始终被赋予一个值 1。到目前为止,我能让它工作的唯一方法是用包含负向前瞻的正则表达式替换:SetEnv REQUEST_TYPE 1:SetEnvIfNoCase Host ^(?!hr.|finance.|marketing.) REQUEST_TYPE=1
有没有更好的方法来分配默认值 1?当我添加更多子域条件时,或者如果我允许另一个请求属性影响 REQUEST_TYPE(例如,如果 Remote_Addr = 192.168.1。[100-150] 则 REQUEST_TYPE = 5),具有负向前瞻的正则表达式可能会变得丑陋且难以管理。
答案1
因此,似乎无法重新分配环境变量。但您可以测试变量是否已设置,如果没有,则将其设置为默认值。
SetEnvIfNoCase Host ^hr\. REQUEST_TYPE=2
SetEnvIfNoCase Host ^finance\. REQUEST_TYPE=3
SetEnvIfNoCase Host ^marketing\. REQUEST_TYPE=4
SetEnvIf REQUEST_TYPE ^$ REQUEST_TYPE=1