我想通过 httpd.conf 为我的所有虚拟主机使用用户代理文本字符串来阻止一些蜘蛛和恶意机器人,但尚未成功。以下是我的 http.conf 文件的内容。知道为什么这不起作用吗?env_module 已加载。
SetEnvIfNoCase User-Agent "^BaiDuSpider" UnwantedRobot
SetEnvIfNoCase User-Agent "^Yandex" UnwantedRobot
SetEnvIfNoCase User-Agent "^Exabot" UnwantedRobot
SetEnvIfNoCase User-Agent "^Cityreview" UnwantedRobot
SetEnvIfNoCase User-Agent "^Dotbot" UnwantedRobot
SetEnvIfNoCase User-Agent "^Sogou" UnwantedRobot
SetEnvIfNoCase User-Agent "^Sosospider" UnwantedRobot
SetEnvIfNoCase User-Agent "^Twiceler" UnwantedRobot
SetEnvIfNoCase User-Agent "^Java" UnwantedRobot
SetEnvIfNoCase User-Agent "^YandexBot" UnwantedRobot
SetEnvIfNoCase User-Agent "^bot*" UnwantedRobot
SetEnvIfNoCase User-Agent "^spider" UnwantedRobot
SetEnvIfNoCase User-Agent "^crawl" UnwantedRobot
SetEnvIfNoCase User-Agent "^NG\ 1.x (Exalead)" UnwantedRobot
SetEnvIfNoCase User-Agent "^MJ12bot" UnwantedRobot
<Directory "/var/www/">
Order Allow,Deny
Allow from all
Deny from env=UnwantedRobot
</Directory>
<Directory "/srv/www/">
Order Allow,Deny
Allow from all
Deny from env=UnwantedRobot
</Directory>
编辑 - @Shane Madden:我在每个虚拟主机的文档根目录中都有以下内容的 .htaccess 文件。
order allow,deny
deny from xxx.xxx.xxx.xxx
deny from xx.xxx.xx.xx
deny from xx.xxx.xx.xxx
...
allow from all
这会引起冲突吗?VirtualHost 配置示例:
<VirtualHost xx.xxx.xx.xxx:80>
ServerAdmin [email protected]
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /srv/www/domain.com/public_html/
ErrorLog "|/usr/bin/cronolog /srv/www/domain.com/logs/error_log_%Y-%m"
CustomLog "|/usr/bin/cronolog /srv/www/domain.com/logs/access_log_%Y-%m" combined
</VirtualHost>
答案1
尝试一下,如果失败,请在 .htaccess 文件中尝试...
#Bad bot removal
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^useragent1 [OR]
RewriteCond %{HTTP_USER_AGENT} ^useragent2 [OR]
RewriteCond %{HTTP_USER_AGENT} ^useragent3
RewriteRule ^(.*)$ http://website-you-want-to-send-bad-bots-to.com
遵循此模式,并且不要在最后一个上放置 [OR]。
编辑:新的解决方案:
如果您想要阻止所有(友好)机器人,请创建一个名为“robots.txt”的文件,并将其放在 index.html 所在的位置。在其中输入以下内容:
User-agent: *
Disallow: /
您仍然需要维护一个像我最初的答案(上面)这样的列表,以禁止忽略 robots.txt 的机器人。
答案2
为了让稍后读到这篇文章的人受益,以下是交易:
我从 .htaccess 文件中删除了允许、拒绝指令的顺序,当我使用 Firefox 中的用户代理切换器欺骗某些用户代理时,能够触发预期的行为,因此似乎确实存在一些冲突。但是,我列表中的其他用户代理没有被阻止——但那是因为我不清楚 httpd.conf 中使用的克拉 (^) 的意义。我读过的正则表达式教程说明了这一点,但一开始并没有真正理解:克拉迫使服务器查找仅有的在一开始的全部的解析连接请求时,用户代理字符串(而不是我最初认为的其中的单个字符串)。由于我希望阻止的某些蜘蛛和机器人的关键标识字符串出现在用户代理字符串的后面,因此我需要删除克拉号才能使事情正常进行。