Я хочу остановиться бинбот полностью и сразу.
Я бы хотел сделать это с помощью mod_rewrite в .htaccess.
У меня есть эти правила ...
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.
Что ж, регулярное выражение в вашем RewriteCond требует, чтобы пользовательский агент начать с бингбот. Это то, что делает ^ в регулярном выражении.
^bingbot/.*
Поскольку пользовательский агент (из вашего примера журнала) не начинается с этого, он не будет соответствовать и пропускает правило.
"Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
Удалите ^, и он должен работать, хотя я не тестировал.
Совет: вы можете удалить дублирование из RewriteConds, сделав совпадение нечувствительным к регистру с помощью опции [NC].
RewriteCond %{HTTP_USER_AGENT} ^bingbot/.* [OR,NC]