.htaccess中的条件php_flag语句

时间:2010-02-13 17:55:50

标签: php apache .htaccess

有没有办法在.htaccess中有条件地执行php_flag语句?以下是我要做的两件事:

如果客户端的IP地址与我使用的IP地址匹配,则打开错误报告:

if %{REMOTE_ADDR} == '12.34.56.78' then
   php_flag error_reporting 1
else
   php_flag error_reporting 0

如果IP地址与我的匹配,请关闭register_globals,这样我就可以调试由此代码打开的任何问题。

if %{REMOTE_ADDR} == '12.34.56.78' then
   php_flag register_globals on
else
   php_flag register_globals on

感谢阅读!

2 个答案:

答案 0 :(得分:1)

凯瑞,

我怀疑你第一次尝试的问题是你的正则表达式是“^192\.168\.0$”。这永远不会匹配任何可能的Remote_Addr,因为您只有3个部分到IP地址,强制“^”开始和“$”结束。

也许您打算使用正则表达式“^192\.168\.0\.”?

请注意,我最后排除了“$”,因此无论IP地址如何结束都无关紧要。我已经包含了一个额外的“\.”转义期,这样您就可以强制匹配的IP地址生成“0”而不是“012”, “001”等(并非这些零填充部分应存在于任何IP地址中)。

答案 1 :(得分:1)

if %{REMOTE_ADDR} == '12.34.56.78' then
   php_flag error_reporting 1
else
   php_flag error_reporting 0

只有在Apache 2.4+中Apache Expressions出现之后,这才真正可能,您可以在其中做这种事情...

<If "%{REMOTE_ADDR} == '12.34.56.78'">
    php_flag error_reporting 1
</If>
<Else>
    php_flag error_reporting 0
</Else>

如果在Apache 2.2上是不可能的,尤其是依赖于请求的内容,例如REMOTE_ADDR。在Apache 2.2上,您拥有<IfDefine>,但这仅测试了在-D选项的Appache命令行中定义的参数的存在。因此,这实际上是每个服务器的配置开关。 (在Apache 2.4上,您可以在服务器配置中使用Define伪指令在某种程度上有条件地 define 参数,但是,仍然不能基于请求AFAIK的元素来定义此参数。此外,您仍然可以在Apache 2.4上使用Apache表达式。)