有条件地设置 Apache 环境变量

有条件地设置 Apache 环境变量

我想有条件地设置 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

相关内容