如何使用 SetEnvIf 根据 Http Host 设置变量?

如何使用 SetEnvIf 根据 Http Host 设置变量?

我正在尝试在 Apache 上设置一个变量

如果 http 主机是 dev URL,则 ENV=DEV

或者

如果 http 主机是 prd URL,则 ENV=PRD

然后使用 $_SERVER['ENV'] 创建一些逻辑分支

到目前为止,这些都对我不起作用,我们确实安装了 setenvif 模块

SetEnvIfNoCase Referer
SetEnvIfNoCase Remote_Host

正确的做法是什么?

答案1

快速浏览一下文档

SetEnvIf 指令根据请求的属性定义环境变量。第一个参数中指定的属性可以是以下三种之一:

HTTP 请求标头字段(有关这些字段的更多信息,请参阅 RFC2616);例如:Host、User-Agent、Referer 和 Accept-Language。可以使用正则表达式来指定一组请求标头。

因此,完全可以将环境变量设置为以Host标头为条件。看起来您正在尝试使用RefererRemote_Host标头,但两者都不是您想要的(尽管理论上在大多数情况下 Referer应该包含标头的值)。将是HostRemote_Host客户发出请求,这根本不是您想要的(并且在大多数配置中根本不可用,因为出于性能原因通常会关闭 DNS 查找)。

尝试这样的操作:

SetEnvIf Host "www-dev\.example\.com" ENV=DEV
SetEnvIf Host "www-production\.example\.com" ENV=PRD

...然后使用 $_SERVER['ENV'] 创建一些逻辑分支

但也请注意,您可以直接在 PHP 中引用标头的值,Host而不必经过这种欺骗手段;$_SERVER['HTTP_HOST']这样就能得到您想要的结果。

相关内容