几个月来,我曾使用过下面各种版本的代码来尝试阻止恶意机器人,但最终发现它实际上不起作用。
我的服务器有许多虚拟主机,因此我希望将代码放在 httpd.conf 中,而不是单独的 .htaccess 文件中,因为这样更易于维护。
服务器信息:Apache 版本:Apache/2.2.15 (Unix) 操作系统:CentOS 版本 6.2
我知道 Apache 的版本不是最新的,但我必须使用它。
因此,下面的代码是从我的 httpd.conf 文件中摘录的缩写,其中只列出了一个虚拟主机部分,并且只列出了一部分机器人:
<Location *>
SetEnvIfNoCase User-Agent ".*MJ12bot.*" bad_bot
SetEnvIfNoCase User-Agent ".*Baiduspider.*" bad_bot
SetEnvIfNoCase User-Agent ".*Vagabondo.*" bad_bot
SetEnvIfNoCase User-Agent ".*lwp-trivial.*" bad_bot
SetEnvIfNoCase User-Agent ".*libwww.*" bad_bot
SetEnvIfNoCase User-Agent ".*Wget.*" bad_bot
SetEnvIfNoCase User-Agent ".*XoviBot.*" bad_bot
SetEnvIfNoCase User-Agent ".*xovibot.*" bad_bot
SetEnvIfNoCase User-Agent ".*AhrefsBot.*" bad_bot
SetEnvIfNoCase User-Agent "SemrushBot" bad_bot
Deny from env=bad_bot
</Location>
<VirtualHost xx.xxx.xx.xxx:80>
DocumentRoot "/var/www/sites/xxx"
ServerName www.xxx.com
ServerAlias xxx.com
ScriptAlias /cgi-bin/ "/var/www/sites/xxx/cgi-bin/"
AddType application/x-httpd-php .html .php
<Directory "/var/www/sites/xxx">
Order allow,deny
Allow from all
Deny from env=bad_bot
Options FollowSymLinks +ExecCGI +Includes
RewriteEngine On
AllowOverride All
Include "/var/www/sites/xxx/.htaccess"
</Directory>
CustomLog "/var/www/sites/logs/xxx_access.log" combined
ErrorLog "/var/www/sites/logs/xxx_error.log"
</VirtualHost>
我已经尝试了有关如何编写机器人部分的各种方法,例如使用通配符,或仅将机器人名称放在引号中,或在其前面加上 ^ 符号,这样如果用户代理实际上以机器人名称开头,就有望捕获机器人名称,等等。
但是,我所做的一切似乎都没有什么效果,这些机器人仍然会返回 200(本地内容)或 302(如果是链接到站外内容)。我估计它应该会抛出 403 错误。
任何帮助均感激不尽。
非常感谢。
答案1
您的基本想法是正确的,但您需要使用<Location />
而不是。我建议阅读和的<Location *>
文档,了解何时可以使用通配符。Location
LocationMatch
另外,您不需要.*
在 User-Agent 模式的开始和结束处使用,也不需要在您的虚拟主机的块deny from env=bad_bot
中使用Directory
。块中的Location
就足够了。
答案2
可能有点晚了,但如果其他人也有同样的需要 https://github.com/mitchellkrogza/apache-ultimate-bad-bot-blocker