拒绝访问URL,然后在htaccess

时间:2016-06-23 04:31:29

标签: apache .htaccess mod-rewrite

我试图阻止坏机器人点击运行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时   仅表示,响应命令行传递的参数。让我来   强调一点。只有命令行!

如何达到我想要的效果?

1 个答案:

答案 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>

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