2016-06-23 29 views
0

我试图阻止坏机器人点击某个链接到一个运行Apache 2.4的站点。这里是我试图在htaccess拒绝访问URL,然后在htaccess中的IP块

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,响应在命令行中传递的参数。让我 强调一点。只有命令行!

如何达到我期待的效果?

回答

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> 

不过,我想知道为什么我在我的问题的第二次尝试失败。