我可以阻止Apache Web服务器上每个站点的搜索爬虫吗?

问题描述:

我在公共互联网上有一些临时服务器,运行一些网站的生产代码的副本。如果分期网站获得索引,我真的不喜欢它。我可以阻止Apache Web服务器上每个站点的搜索爬虫吗?

有没有一种方法可以修改登台服务器上的httpd.conf以阻止搜索引擎爬虫?

因为我使用脚本将相同的代码库复制到两台服务器,所以更改robots.txt并不会真正起作用。另外,我宁愿不更改虚拟主机conf文件,因为有很多网站,如果我创建新网站,我不想记得复制某个设置。

创建一个机器人。包含以下内容的txt文件:

User-agent: * 
Disallow:/

将该文件放在暂存服务器上的某个位置;您的目录根目录是一个不错的地方(例如/var/www/html/robots.txt)。

以下添加到您的httpd.conf文件:

# Exclude all robots 
<Location "/robots.txt"> 
    SetHandler None 
</Location> 
Alias /robots.txt /path/to/robots.txt 

可能是不需要的SetHandler指令,但它可能如果你使用像mod_python的处理程序,例如需要。

现在将为您的服务器上的所有虚拟主机提供robots.txt文件,覆盖您对单个主机可能具有的所有robots.txt文件。 (注意:我的答案基本上与ceejayoz的答案暗示你是这么做的是一样的,但是我不得不多花几分钟的时间搞清楚所有的细节以使其起作用。我决定把这个答案放在这里其他人可能会遇到这个问题。)

+0

为我节省了很多时间。日Thnx。 – Khuram 2012-05-07 09:23:31

尝试Using Apache to stop bad robots。您可以在线获取user agents或只允许浏览器,而不是试图阻止所有漫游器。

您能否将暂存虚拟主机上的robots.txt别名为托管在其他位置的限制性robots.txt?

根据您的部署方案,您应该寻找方法将不同的robots.txt文件部署到dev/stage/test/prod(或您拥有的任何组合)。假设你有不同的数据库配置文件或(或其他的类似)在不同的服务器上,这应该遵循类似的过程(你有你的数据库不同的密码,对吧?)

如果没有一步一步的部署过程到位,这可能是一个很好的动机...有很多工具可以用于不同的环境 - Capistrano是一个很好的工具,并且在Rails/Django世界中很受欢迎,但是没有意味着唯一的一个。

做不到这一切,你很可能设立在你的Apache配置全球Alias指令将适用于所有virtualhosts并指向一个限制性的robots.txt

要真正停止编入索引的网页,你会需要将网站隐藏在HTTP auth之后。您可以在全局Apache配置中执行此操作,并使用简单的.htpasswd文件。

唯一不足的是,您现在必须在第一次浏览登台服务器上的任何页面时输入用户名/密码。

+0

这种方法存在一个问题,当你想将一些API暴露给不支持HTTP Auth的不同服务时。在这种情况下,您必须为特定主机禁用它,这可能会导致时间混乱。 – 2014-05-13 12:50:26

你可以使用Apache的mod_rewrite来做到这一点。假设您的真实主机是www.example.com,并且您的登台主机是staging.example.com。创建一个名为“robots-staging.txt”的文件,并有条件地重写请求以执行该操作。

这个例子是适用于保护一个临时网站,有点简单的用例比你要求什么的,但这确实为我工作:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Dissuade web spiders from crawling the staging site 
    RewriteCond %{HTTP_HOST} ^staging\.example\.com$ 
    RewriteRule ^robots.txt$ robots-staging.txt [L] 
</IfModule> 

你可以尝试重定向蜘蛛到不同服务器上的主robots.txt,但是 某些蜘蛛在得到HTTP请求中的“200 OK”或“404 not found”返回代码之外的任何内容后可能会出现问题,并且它们可能无法读取重定向的网址。

这里是你会怎么做:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Redirect web spiders to a robots.txt file elsewhere (possibly unreliable) 
    RewriteRule ^robots.txt$ http://www.example.com/robots-staging.txt [R] 
</IfModule>