20

我在公共互联网上有一个登台服务器,为一些网站运行生产代码的副本。如果登台站点被编入索引,我真的不喜欢它。

有没有办法可以修改临时服务器上的 httpd.conf 以阻止搜索引擎爬虫?

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

4

6 回答 6

38

创建一个包含以下内容的 robots.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 的回答建议你做的基本相同,但我不得不多花几分钟时间弄清楚所有细节才能让它发挥作用。为了其他人,我决定把这个答案放在这里谁可能会偶然发现这个问题。)

于 2011-09-09T16:58:26.670 回答
4

您可以使用 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 未找到”返回码之外的任何内容后犹豫不决,并且他们可能不会阅读重定向的 URL。

以下是你将如何做到这一点:

<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>
于 2009-08-14T15:49:58.047 回答
2

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

于 2008-10-22T19:00:53.603 回答
2

要真正阻止页面被索引,您需要将站点隐藏在HTTP auth后面。您可以在全局 Apache 配置中执行此操作并使用简单的 .htpasswd 文件。

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

于 2008-10-22T19:18:05.363 回答
1

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

如果您没有一个一步到位的部署过程,这可能是一个很好的动机......有大量的工具适用于不同的环境 - Capistrano 是一个非常好的工具,并且在 Rails/ 中受到青睐Django 的世界,但绝不是唯一的。

如果失败了,您可能会在 Apache 配置中设置一个全局别名指令,该指令将应用于所有虚拟主机并指向限制性 robots.txt

于 2008-10-22T19:04:00.853 回答
0

尝试使用 Apache 来阻止坏机器人。您可以让用户代理在线或只允许浏览器,而不是试图阻止所有机器人。

于 2008-10-22T18:58:33.670 回答