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

有没有办法可以修改登台服务器上的httpd.conf来阻止搜索引擎抓取工具?

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

有帮助吗?

解决方案

使用以下内容创建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的答案建议你做的一样,但我不得不花费额外的时间来弄清楚所有细节以使其发挥作用。我决定把这个答案放在这里其他可能偶然发现这个问题的人。)

其他提示

您可以使用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,但是 一些蜘蛛在获得除“200 OK”以外的任何东西之后可能会犹豫不决。或“未找到404”从HTTP请求返回代码,他们可能无法读取重定向的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>

您是否可以将暂存虚拟主机上的robots.txt替换为托管在其他位置的限制性robots.txt?

要真正阻止网页被编入索引,您需要隐藏 HTTP身份验证。您可以在全局Apache配置中执行此操作,并使用简单的.htpasswd文件。

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

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

如果你没有一步到位的部署过程,这可能是一个很好的动力来获得一个...有很多工具可用于不同的环境--Capistrano是一个相当不错的工具,并且受到青睐Rails / Django世界,但绝不是唯一的。

如果不这样做,您可以在Apache配置中设置一个全局Alias指令,该指令适用于所有虚拟主机并指向限制性robots.txt

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top