Установка различных значений с помощью SetEnvIfNoCase не работает

Я пытаюсь фильтровать некоторых ботов, блокируя их в 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 запрещено.

В чем дело ?

1

Решение

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 обеспечивает идентичную функциональность с более коротким синтаксисом. И вы можете удалить все .* в вашем регулярном выражении.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]