我想停止宾博完全并且立即。
我想使用 .htaccess 中的 mod_rewrite 来做到这一点。
我有这些规则……
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^bingbot/.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bingbot/.* [OR]
RewriteRule ^(.*)$ http://go.away/ [L]
...但它们不起作用。我在日志中看到的是这种类型的条目...
msnbot-207-46-195-224.search.msn.com - - [11/Jul/2011:15:07:27 -0700] "GET /index.php?url_mainnav=13&url_subnav=131&url_expand=394,949,4631&url_startrow=110 HTTP/1.1" 403 502 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
...我已经尝试了 HTTP_USER_AGENT 正则表达式的多种变体,但我无法得到我想要的响应,因此我推测我使用的规则的实际结构不正确。
有人能给我指明正确的方向吗?
顺便说一句,我知道这种事情在 iptables 等中完成得更好,我也知道 robots.txt。它是共享主机,所以我无法控制 iptables,而且我不想等待 bingbot 重新读取 robots.txt 的六/八个小时。
事情正在向前发展。考虑到答案,我将重写规则更改为:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^bingbot/.* [OR,NC]
RewriteCond %{HTTP_USER_AGENT} .*bingbot/.* [OR]
RewriteCond %{HTTP_USER_AGENT} .*Bingbot/.* [OR]
RewriteRule ^(.*)$ http://go.away/ [L]
bingbot 的条目仍出现在访问日志中,但这让我意识到(我认为)我误解了日志中显示的 HTTP 响应代码。看来 403 是“禁止”,所以也许我的规则正在做我想要的事情(告诉 bingbot 离开),但请求被记录了?我以为日志不会反映被 mod_rewrite 推开的东西?如果有人能发表评论,我会很感兴趣,因为我仍然不能 100% 地确定我是否摆脱了 bingbot 的访问。
答案1
嗯,你的 RewriteCond 中的正则表达式要求用户代理从...开始bingbot。这就是正则表达式中的 ^ 的作用。
^bingbot/.*
由于用户代理(从您的日志示例来看)不是以此开头,因此它不会匹配并跳过规则。
"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
删除 ^ 就可以工作了,尽管我还没有测试过。
提示:您可以使用 [NC] 选项使匹配不区分大小写,从而从 RewriteConds 中删除重复项。
RewriteCond %{HTTP_USER_AGENT} ^bingbot/.* [OR,NC]