1

我正在尝试使用 IfDefine 阻止由 CustomLog 生成的 IP 列表,以避免再次记录 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 pass(为什么?)
  3. CustomLog 使用逆条件(为什么又是?)
  4. blacklist.log 添加了相同的 IP

有人可以解释这种行为吗?

4

2 回答 2

0

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

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

于 2018-12-20T15:04:10.073 回答
0

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

于 2020-02-26T06:54:36.897 回答