我想有条件地设置 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>
Run Code Online (Sandbox Code Playgroud)
但是,该变量总是被赋值为 1。到目前为止,我能够让它工作的唯一方法是将 SetEnv REQUEST_TYPE 1 替换为包含负前瞻的正则表达式: SetEnvIfNoCase Host ^(?!hr.|金融。|营销。)REQUEST_TYPE=1
有没有更好的方法来分配默认值 1?当我添加更多子域条件时,或者如果我允许另一个请求属性影响 REQUEST_TYPE(例如,如果 Remote_Addr = 192.168.1.[100-150] 然后 REQUEST_TYPE = 5),具有负前瞻的正则表达式可能会变得丑陋和困难管理。
因此,似乎无法重新分配环境变量。但是可以测试变量是否设置,如果没有,设置为默认值。
SetEnvIfNoCase Host ^hr\. REQUEST_TYPE=2
SetEnvIfNoCase Host ^finance\. REQUEST_TYPE=3
SetEnvIfNoCase Host ^marketing\. REQUEST_TYPE=4
SetEnvIf REQUEST_TYPE ^$ REQUEST_TYPE=1
Run Code Online (Sandbox Code Playgroud)