我在公共互联网上有一个临时服务器,为几个网站运行生产代码的副本。 我真的不喜欢它,如果中转站点索引。
有没有一种方法,我可以修改登台服务器上的httpd.conf来阻止search引擎爬虫?
由于我使用脚本将相同的代码库复制到两台服务器,因此更改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这样的处理程序,可能需要SetHandler指令。
现在,robots.txt文件将被用于服务器上的所有虚拟主机,覆盖所有可能用于单个主机的robots.txt文件。
(注意:我的答案基本上和ceejayoz的回答是暗示你是一样的,但是我不得不多花点时间弄清楚所有的细节,以便让它起作用。我决定把这个答案放在这里是为了别人谁可能会偶然发现这个问题。)
你可以使用Apache的mod_rewrite来做到这一点。 假设您的真实主机是www.example.com,并且您的暂存主机是staging.example.com。 创建一个名为“robots-staging.txt”的文件,并有条件地重写请求。
这个例子适合于保护一个单独的临时站点,比你所要求的更简单一些,但是这对我来说是可靠的:
<Ifmodulee 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] </Ifmodulee>
您可以尝试将蜘蛛重定向到另一台服务器上的主robots.txt,但某些蜘蛛可能会在得到HTTP请求中的“200 OK”或“404 not found”返回代码之外的任何东西之后出现问题,并且他们可能不会读取重定向的URL。
以下是你将如何做到这一点:
<Ifmodulee 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] </Ifmodulee>
您可以将暂存虚拟主机上的robots.txt别名为托管在其他位置的限制性robots.txt吗?
要真正阻止网页被索引,您需要隐藏HTTP验证背后的网站。 您可以在您的全局Apache配置中执行此操作,并使用简单的.htpasswd文件。
唯一的缺点是,您现在必须在第一次浏览登台服务器上的任何页面时输入用户名/密码。
尝试使用Apache来阻止坏的机器人 。 您可以在线获取用户代理或仅允许浏览器,而不是尝试阻止所有漫游器。
根据您的部署方案,您应该设法将不同的robots.txt文件部署到dev / stage / test / prod(或者您拥有的任何组合)。 假设你在不同的服务器上有不同的数据库配置文件或(或类似的),这应该遵循一个类似的过程(你的数据库有不同的密码,对吧?)
如果你没有一个一步的部署过程,这可能是一个很好的动机…有不同的环境有很多工具 – Capistrano是一个很好的,并在Rails / Django的世界,但绝不是唯一的一个。
如果不行,你可以在你的Apache配置文件中设置一个全局的Alias指令,这个指令适用于所有的虚拟主机,并指向一个限制性的robots.txt