我试图阻止坏机器人点击运行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指令,仅限,仅当我只说i时 仅表示,响应命令行传递的参数。让我来 强调一点。只有命令行!
如何达到我想要的效果?
答案 0 :(得分:0)
这需要大量的试验和错误,但这似乎在THE_REQUEST
上工作,包括任何查询字符串数据:
# Filter on those requests with an adwords string
<If "%{THE_REQUEST} =~ /gclid=/i">
# BAN USER BY IP
Order Deny,Allow
Deny from 172.64.0.0/13
Deny from 173.245.48.0/20
...
</If>
不过,我想知道为什么我的第二次尝试失败了。