Я пытаюсь фильтровать некоторых ботов, блокируя их в htaccess, как это
#UniversalRules
SetEnvIfNoCase User-Agent ^$ bad_bot #leave this for blank user-agents
SetEnvIfNoCase User-Agent .*\@.* bad_bot
SetEnvIfNoCase User-Agent .*bot.* bad_bot
Но эти правила также блокируют хороших ботов, поэтому я добавил ниже
#Goodbots
SetEnvIfNoCase User-Agent .*google.* good_bot
SetEnvIfNoCase User-Agent .*bingbot.* good_bot #bing
И, наконец, правило блокировки —
Order Allow,Deny
Allow from all
Deny from env=bad_bot
Но когда я использую пользовательский агент GoogleBot (Googlebot / 2.1 (+http://www.googlebot.com/bot.html) Я получаю — 403 запрещено.
В чем дело ?
GoogleBot устанавливает обе переменные среды; установка переменной (good_bot
) не сбрасывает другие переменные (bad_bot
). Вы можете установить одну переменную и затем сбросить ее:
#UniversalRules
SetEnvIfNoCase User-Agent ^$ bad_bot
SetEnvIfNoCase User-Agent .*\@.* bad_bot
SetEnvIfNoCase User-Agent .*bot.* bad_bot
#Goodbots
SetEnvIfNoCase User-Agent .*google.* !bad_bot
SetEnvIfNoCase User-Agent .*bingbot.* !bad_bot
Увидеть mod_setenvif ссылка на примеры. BrowserMatchNoCase
обеспечивает идентичную функциональность с более коротким синтаксисом. И вы можете удалить все .*
в вашем регулярном выражении.
Других решений пока нет …