由于我在设置类似的东西以识别我的家庭本地主机与我的工作设置不同时遇到了很多问题,这就是我最终要做的事情。
首先,<IF ..> 指令无法识别 SetEnv。来自http://httpd.apache.org/docs/current/env.html:“SetEnv 指令在请求处理期间运行较晚,这意味着 SetEnvIf 和 RewriteCond 等指令将看不到使用它设置的变量。”
因此,如果可以,请尝试使用 SetEnvIf。我很懒,只是把它放在我的 httpd.conf 文件中。它检查它是否在本地主机上运行 - 这显然是 - 然后设置变量:
SetEnvIf Server_Addr ^127\.0\.0\.1$ home_variable
然后,在其他地方,在我的 htaccess 文件中,我有这个:
# IfVersion needs mod_version - you could do an ifmodule before all this i guess
# we use ifversion because If was introduced in apache 2.4
<IfVersion >= 2.4>
# check if the home variable exists/isn't: empty, "0", "off", "false", or "no"
<If "-T reqenv('home_variable')">
... do home-y stuff
</If>
<Else>
... do work-y stuff
</Else>
</IfVersion>
# fallback
<IfVersion < 2.4>
.. fallback?
</IfVersion>
或者,您可以只为每个环境设置一个变量并为其指定一个特定值:
SetEnvIf Server_Addr ^127\.0\.0\.1$ check_location=home
那么其余的都是一样的,除了 first<If ..> 声明:
<If "%{ENV:check_location} == 'home'">....</If>
我已经在 2.4 的家庭环境和 2.2 的工作环境之间测试了这两个环境,两者都启用了 mod_version(因此不打扰 ifmod)。
(我也没有测试两个以上的环境,但 Apache 2.4 确实提供了<ElseIf>,所以这也是一个选项)。
Doop di do。
(有关 -T 运算符等的更多信息:http://httpd.apache.org/docs/current/expr.html)