我可以阻止Apache web服务器上每个站点的搜索爬虫程序吗?
我在公共互联网上有一个临时服务器,运行一些网站的生产代码副本。我真的不喜欢临时站点被索引 有没有办法在登台服务器上修改httpd.conf以阻止搜索引擎爬虫我可以阻止Apache web服务器上每个站点的搜索爬虫程序吗?,apache,search,web-crawler,httpd.conf,Apache,Search,Web Crawler,Httpd.conf,我在公共互联网上有一个临时服务器,运行一些网站的生产代码副本。我真的不喜欢临时站点被索引 有没有办法在登台服务器上修改httpd.conf以阻止搜索引擎爬虫 更改robots.txt不会真正起作用,因为我使用脚本将相同的代码库复制到两台服务器。另外,我也不想更改虚拟主机conf文件,因为有很多站点,如果我创建了一个新站点,我不想记住复制某个设置。试试。您可以在线获取或只允许浏览器,而不是试图阻止所有机器人。您可以将虚拟主机上的robots.txt别名为托管在不同位置的限制性robots.txt吗
更改robots.txt不会真正起作用,因为我使用脚本将相同的代码库复制到两台服务器。另外,我也不想更改虚拟主机conf文件,因为有很多站点,如果我创建了一个新站点,我不想记住复制某个设置。试试。您可以在线获取或只允许浏览器,而不是试图阻止所有机器人。您可以将虚拟主机上的robots.txt别名为托管在不同位置的限制性robots.txt吗?根据您的部署场景,您应该寻找将不同robots.txt文件部署到dev/stage/test/prod的方法假设您在不同的服务器上有不同的数据库配置文件或(或类似的文件),这应该遵循类似的过程(您的数据库有不同的密码,对吗?) 如果您没有一步到位的部署过程,这可能是获得一个部署过程的良好动机…有很多工具可用于不同的环境-Capistrano是一个非常好的工具,在Rails/Django世界中备受青睐,但决不是唯一的一个
如果做不到这一点,您可能会在Apache配置中设置一个全局别名指令,该指令将应用于所有虚拟主机,并指向一个限制性的robots.txt。要真正阻止页面被索引,您需要隐藏后面的站点。您可以在全局Apache配置中这样做,并使用一个简单的.htpasswd文件
唯一的缺点是,您现在必须在第一次浏览登台服务器上的任何页面时键入用户名/密码。您可以使用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>
重新启动发动机
#阻止网络爬行器在临时站点上爬行
重写cond%{HTTP_HOST}^staging\.example\.com$
重写规则^robots.txt$robots-staging.txt[L]
您可以尝试将爬行器重定向到其他服务器上的master robots.txt,但是
一些爬行器可能会在从HTTP请求中获得除“200OK”或“404NotFound”返回代码之外的任何其他返回代码后犹豫不决,并且可能不会读取重定向的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>
重新启动发动机
#将web爬行器重定向到其他位置的robots.txt文件(可能不可靠)
重写规则^robots.txt$http://www.example.com/robots-staging.txt [R]
创建包含以下内容的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无
别名/robots.txt/path/to/robots.txt
SetHandler
指令可能不是必需的,但是如果您使用的是mod_python之类的处理程序,则可能需要它
该robots.txt文件现在将提供给服务器上的所有虚拟主机,覆盖您可能为单个主机提供的任何robots.txt文件
(注意:我的答案基本上与ceejayoz的答案建议你做的是一样的,但我不得不多花几分钟弄清楚所有细节才能让它发挥作用。我决定把这个答案放在这里是为了其他可能偶然发现这个问题的人。)为我节省了很多时间。Thnx.
别名是指什么?如果我有几个虚拟主机,我应该为每个虚拟主机创建一个别名吗?@nicoX:您不需要为每个虚拟主机创建单独的别名。您在这里创建的别名将应用于您创建的所有虚拟主机。从httpd.conf
文件:我们有LoadModule vhost_alias_module modules/mod_vhost_alias.so
ourDocumentRoot/var/www/html
,这是错误的,因为我们使用的是/var/www/vhost
,尽管这仍然有效。我们将vhost包含在include
中,并带有其httpd include.conf
文件的路径。我为每个vhost都位于其根目录中。并且httpd.conf
我的vhost中只有一个文件的别名。当您希望将某些API公开给不支持HTTP身份验证的不同服务时,这种方法存在问题。在这种情况下,您必须为特定主机禁用它,这可能会导致时间混乱。