.htaccess未阻止指定的用户代理

时间:2015-05-05 21:08:17

标签: regex .htaccess mod-rewrite user-agent

更新 我找到了Firefox插件:User Agent Switcher,它允许我使用不同的用户代理进行测试。令人惊讶的是,它阻止了用户代理。我想知道为什么在我通过.htaccess的第一次阻止尝试之后发生的12个左右的请求以某种方式滑入。页面请求是否已经在进行中?哦,好吧,至少他们在工作。

在我的.htaccess我有一个php脚本,它检查有问题的用户代理字符串并动态写入.htaccess RewriteCond以立即阻止用户代理。

我尝试通过编写以下条件Mozilla/5.0 (Auto Shell Spider)来阻止代理RewriteCond %{HTTP_USER_AGENT} ^.*(Mozilla/5\.0\ \(Auto\ Shell\ Spider\)).*$ [NC],但我的日志显示用户代理继续访问页面(在接下来的2秒内再次访问10+)。我已使用preg_match()对规则进行了测试,但它匹配,因此应阻止用户代理。怎么了? 我认为我不需要AND RewriteCond,因为每个人都有自己的RewriteRule。我不相信有.htaccess的缓存 - 更改应立即生效。 php正则表达式与htaccess不同吗?

任何帮助都将不胜感激。

以下是一套更完整的.htaccess说明:

RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php

# Block spiders: 
    RewriteCond %{HTTP_USER_AGENT} ^.*(Baiduspider|360Spider|Sogou|Sosospider|Yandex|NaverBot|Yeti|moget|ichiro|RedBot|AhrefsBot|xovibot).*$ [NC]
    RewriteRule .* - [R=403,L]
Deny from 59.61.184.100
Deny from 59.152.240.71

# Block User Agent -  NOT WORKING?
RewriteCond %{HTTP_USER_AGENT} ^.*(Mozilla/5\.0\ \(Auto\ Shell\ Spider\)).*$ [NC]
RewriteRule .* - [R=403,L]

使用php preg_match时,

$text =  "Mozilla/5.0 (Auto Shell Spider)";
preg_match('`^.*(Mozilla/5\.0\ \(Auto\ Shell\ Spider\)).*$`', $text, $acell);    
echo "<pre>";var_dump($acell);echo "</pre>";    

我得到如下匹配:

array (size=2)
  0 => string 'Mozilla/5.0 (Auto Shell Spider)' (length=31)
  1 => string 'Mozilla/5.0 (Auto Shell Spider)' (length=31)

1 个答案:

答案 0 :(得分:0)

尝试重新排序您的规则:

Deny from 59.61.184.100
Deny from 59.152.240.71

RewriteEngine On

# Block spiders: 
RewriteCond %{HTTP_USER_AGENT} ^.*(Baiduspider|360Spider|Sogou|Sosospider|Yandex|NaverBot|Yeti|moget|ichiro|RedBot|AhrefsBot|xovibot).*$ [NC]
RewriteRule ^ - [R=403,L]

# Block User Agent -  NOT WORKING?
RewriteCond %{HTTP_USER_AGENT} "Mozilla/5\.0 \(Auto Shell Spider\)" [NC]
RewriteRule ^ - [R=403,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [L]