【发布时间】:2016-06-23 04:31:29
【问题描述】:
我正试图阻止恶意机器人点击某些链接到一个运行 Apache 2.4 的站点。这是我在htaccess 中尝试的内容:
RewriteEngine On
# Check for the suspect querystring first
RewriteCond %{QUERY_STRING} gclid=(.*)
RewriteRule .* - [E=IsAdClick:1]
# Filter on those requests with an ad string
<IfDefine IsAdClick>
# BAN USER BY IP
Order Deny,Allow
Deny from 172.64.0.0/13
Deny from 173.245.48.0/20
...
</IfDefine>
如果拒绝规则单独使用,则它们会起作用,但是对于我的一生,我无法使条件起作用。我尝试过其他方法,例如
<If "%{QUERY_STRING} =~ /gclid=.*?/">
# BAN USER BY IP
Order Deny,Allow
Deny from 172.64.0.0/13
Deny from 173.245.48.0/20
...
</If>
但是没有效果。流量仍然通过。我错过了什么?我不想为每个 IP 写一大堆RewriteCond,也不想更改.config 文件。谢谢。
更新: 根据this SO post 看来IfDefine 只响应命令行参数。参考:
Apache 中的 IfDefine 指令, Only , ONLY 以及当我说 only i 仅表示,响应在命令行传递的参数。让我来 强调一点。只有命令行!
但是如何达到我想要的效果呢?
【问题讨论】:
标签: apache .htaccess mod-rewrite