如何通过 .htaccess 阻止"bot*"机器人



我的 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>

如果您有任何疑问,请告诉我。

相关内容

最新更新