![如何通过远程主机名 / 域名阻止 Apache 中所有虚拟主机的蜘蛛 / 爬虫?](https://linux22.com/image/569416/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E8%BF%9C%E7%A8%8B%E4%B8%BB%E6%9C%BA%E5%90%8D%20%2F%20%E5%9F%9F%E5%90%8D%E9%98%BB%E6%AD%A2%20Apache%20%E4%B8%AD%E6%89%80%E6%9C%89%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA%E7%9A%84%E8%9C%98%E8%9B%9B%20%2F%20%E7%88%AC%E8%99%AB%EF%BC%9F.png)
我见过很多 robot.txt 的东西,还有一些看起来很有希望的 mod-rewrite 解决方案……但一直没能找到一个简单的解决方案来阻止蜘蛛/爬虫/任何我想阻止的人……我宁愿通过主机名/域名来做到这一点,因为它看起来比依赖用户代理等更简单……
例如,假设我在 Apache 日志中看到这个。
msnbot-207-46-192-48.search.msn.com - - [07/Dec/2011:23:01:41 -0500] "GET /%3f/$/bluebox/blog/2011/iphoto/ HTTP/1.1" 404 366
好的……我想阻止*.search.msn.com
它来到这里,或我的任何网站 - 在我的任何文件夹中 - VHOST 或其他……
通常,我有许多<VirtualHost *.80>
设置,并且不想为每个主机重复配置。同样,我有许多DocumentRoot
...并且在每个设置中都放置一些文件,这.htaccess
真的不是一个选择。
我一直在使用httpd.conf
类似的东西......
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^BadBot [OR]
RewriteRule ^(.*)$ http://go.away/`
我如何使用提供的主机名来覆盖我想要的任何域名? UseCanonicalName On
Deny all
答案1
通过主机名来执行此操作可能不是最好的主意,因为 Apache 必须对每个请求进行查找。
为什么不使用 IPtables 来做呢?
答案2
UseCanonicalName
是服务器主机名,而不是客户端的主机名。
VirtualHost
只要您Order
在 vhosts 中没有指令,这将在您的全局配置中正常工作,在任何之外:
Order Allow,Deny
Allow from all
Deny from search.msn.com