通过 SetEnvIfNoCase 设置各种值不起作用

Setting various values by SetEnvIfNoCase is not working

我正在尝试通过在“.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 以更短的语法提供相同的功能。您可以删除正则表达式中的所有 .*