2016-06-23 27 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> 

不過,我想知道爲什麼我在我的問題的第二次嘗試失敗。