【发布时间】:2015-05-05 21:08:16
【问题描述】:
更新
我找到了 Firefox 插件:用户代理切换器,它允许我使用不同的用户代理进行测试。令人惊讶的是,它按应有的方式阻止了用户代理。我想知道为什么在我第一次通过.htaccess 尝试阻止之后发生的大约 12 个请求不知何故溜进来了。页面请求是否已经在处理中?哦,好吧,至少他们在工作。
在我的.htaccess 中,我有一个 php 脚本,它检查有问题的用户代理字符串并动态写入 .htaccess 和 RewriteCond 以立即阻止用户代理。
我试图通过编写以下条件 RewriteCond %{HTTP_USER_AGENT} ^.*(Mozilla/5\.0\ \(Auto\ Shell\ Spider\)).*$ [NC] 来阻止代理 Mozilla/5.0 (Auto Shell Spider),但我的日志显示用户代理继续访问页面(在接下来的 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)
【问题讨论】:
标签: regex .htaccess mod-rewrite user-agent