我想立即停止bingbot 。
我想要在.htaccess中使用mod_rewrite来做到这一点。
我有这些规则…
Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_USER_AGENT} ^bingbot/.* [OR] RewriteCond %{HTTP_USER_AGENT} ^Bingbot/.* [OR] RewriteRule ^(.*)$ http://go.away/ [L]
…但他们不工作。 我可以在我的日志中看到这种types的条目…
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的正则expression式的多种变化,但我不能我想要的响应,所以我认为我使用的规则的实际结构是不正确的。
任何人都可以指向正确的方向吗?
顺便说一下,我知道这样的事情在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离开),但是请求已经被logging下来了? 我以为日志不会反映被mod_rewrite推走的东西? 会有兴趣,如果有人可以评论,因为我仍然不是100%,我摆脱bingbot访问。
那么,RewriteCond中的正则expression式要求用户代理以 bingbot 开始 。 这正是正则expression式中的^。
^bingbot/.*
由于用户代理(从您的日志示例)不以此为开始,它将不匹配并跳过规则。
"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
删除^,它应该工作,但我没有testing。
小窍门:通过使用[NC]选项使大小写不区分大小写,可以消除RewriteConds中的重复。
RewriteCond %{HTTP_USER_AGENT} ^bingbot/.* [OR,NC]