如何通过.htaccess阻止“bot *”bot

时间:2015-06-19 10:45:27

标签: .htaccess bots

我的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 [*] ),没有一个停了机器人。

2 个答案:

答案 0 :(得分:3)

星号(*)不是文字。 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]

答案 1 :(得分:1)

我们可以使用.htaccess文件中的bot精确名称来阻止机器人。下面的示例肯定会帮助您,目前我使用相同的设置,它保存我的服务器资源。

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>

如果您有任何疑问,请与我们联系。