我怎样才能使用SetEnvIf设置一个基于Http主机的variables?

我试图在Apache上设置一个variables

如果http主机是开发者URL,则ENV = DEV

要么

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

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

到目前为止,这些都没有为我工作,我们已经安装了setenvif模块

SetEnvIfNoCase Referer SetEnvIfNoCase Remote_Host 

什么是正确的方法来做到这一点?

快速浏览文档 :

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

HTTP请求头字段(有关这些的更多信息,请参阅RFC2616); 例如:主机,用户代理,引用者和接受语言。 正则expression式可以用来指定一组请求头。

所以,当然可以在Host标题中设置一个环境variables。 它看起来像你试图使用RefererRemote_Host头,这两者都不是你想要的(虽然理论上Referer在大多数情况下应该包含Host头的值)。 Remote_Host会成为发出请求的客户端的主机名,这根本就不是你想要的(在大多数configuration中根本不可用,因为出于性能原因closures了DNS查找是典型的)。

尝试这样的事情:

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

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

但是请注意,您可以直接在PHP中直接引用Host头的值,而不必经过这个骗局; $_SERVER['HTTP_HOST']将正是你想要的。