我的 Awstats 文件中有以下条目:
Unknown robot (identified by 'bot*')
如何阻止此机器人?
我分别尝试了以下内容,但似乎都没有抓住它:
RewriteCond %{HTTP_USER_AGENT} ^bot*
RewriteCond %{HTTP_USER_AGENT} bot*
RewriteCond %{HTTP_USER_AGENT} bot[*]
这是我正在使用的完整.htaccess代码:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^bot*
RewriteRule .? - [F,L]
在第二行测试了三个正则表达式值(^bot*、bot\*、bot[*]),没有一个停止机器人。
星号 (*
) 不是字面意思。AWStats 只是简单地声明它使用该特定规则来检查请求是否由机器人发出。在您的情况下,bot*
表示用户代理字符串以 bot
开头,并且它找到了匹配项。
由于星号不是文字,因此可以改用以下内容:
RewriteCond %{HTTP_USER_AGENT} ^bot [OR] # matches bot* (the same as ^bot.*$)
RewriteCond %{HTTP_USER_AGENT} bot$ # matches *bot (the same as ^.*bot$)
注意:我应该在这里说,最好检查您的访问日志,以准确了解这些用户代理是什么并专门阻止它们。您不想发现自己处于阻止您可能想要的机器人的位置。
建议:将规则从
RewriteRule .? - [F,L]
更改为RewriteRule ^ - [F,L]
我们可以在 .htaccess 文件中使用机器人的确切名称来阻止机器人。下面的示例肯定会对您有所帮助,目前我使用相同的设置,它节省了我的服务器资源。
SetEnvIfNoCase User-Agent "Yandex" bad_bot
SetEnvIfNoCase User-Agent "AhrefsBot" bad_bot
SetEnvIfNoCase User-Agent "MJ12bot" bad_bot
<IfModule mod_authz_core.c>
<Limit GET POST>
<RequireAll>
Require all granted
Require not env bad_bot
</RequireAll>
</Limit>
</IfModule>
如果您有任何疑问,请告诉我。