我正在尝试在 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
标头为条件。看起来您正在尝试使用Referer
或Remote_Host
标头,但两者都不是您想要的(尽管理论上在大多数情况下 Referer
应该包含标头的值)。将是Host
Remote_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']
这样就能得到您想要的结果。