为什么指令<ifdefine>不起作用(Apache 2.4)?

时间:2017-07-14 14:12:57

标签: apache security mod-rewrite ifdefine

我正在尝试使用IfDefine来阻止CustomLog生成的IP列表以避免再次使用log ip,但它无效。我更改了CustomLog条件,可以观察到奇怪的行为:

RewriteMap blacklist txt:/var/www/blacklist.log
RewriteCond   ${blacklist:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond   ${blacklist:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND
RewriteRule   ^ - [F,E=BLOCKED_IP]

<IfDefine !BLOCKED_IP>
  SetEnvIf Request_URI "^/xmlrpc\.php$" BAD_BEHAVIOR
  CustomLog /var/log/apache2/blacklist.log "%h ## %t BAD_BEHAVIOR \"%r\" %>s %b \"%{User-agent}i\"" env=BLOCKED_IP
</IfDefine>

即使BLOCKED_IP为true,IfDefine中的代码也会执行而且CustomLog有一个反条件...它没有任何意义-.-

  1. RewriteRule定义BLOCKED_IP
  2. IfDefine!BLOCKED_IP传递(为什么?)
  3. CustomLog使用反条件(为什么再次?)
  4. blacklist.log添加了相同的IP
  5. 有人可以解释这种行为吗?

2 个答案:

答案 0 :(得分:0)

IfDefine不适用于在应用程序启动后定义的环境变量。

仅适用于通过-Dparameter在命令行上设置的参数

答案 1 :(得分:0)

Apache 2.4不支持使用<IfDefine !xxx>之类的用法,请删除“!”将正常工作