有条件地设置一个 Apache 环境变量

Tim*_*lin 3 apache-2.2

我想有条件地设置 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),具有负前瞻的正则表达式可能会变得丑陋和困难管理。

Pow*_*00n 7

因此,似乎无法重新分配环境变量。但是可以测试变量是否设置,如果没有,设置为默认值。

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)