Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以阻止Apache web服务器上每个站点的搜索爬虫程序吗?_Apache_Search_Web Crawler_Httpd.conf - Fatal编程技术网

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

我可以阻止Apache web服务器上每个站点的搜索爬虫程序吗?,apache,search,web-crawler,httpd.conf,Apache,Search,Web Crawler,Httpd.conf,我在公共互联网上有一个临时服务器,运行一些网站的生产代码副本。我真的不喜欢临时站点被索引 有没有办法在登台服务器上修改httpd.conf以阻止搜索引擎爬虫 更改robots.txt不会真正起作用,因为我使用脚本将相同的代码库复制到两台服务器。另外,我也不想更改虚拟主机conf文件,因为有很多站点,如果我创建了一个新站点,我不想记住复制某个设置。试试。您可以在线获取或只允许浏览器,而不是试图阻止所有机器人。您可以将虚拟主机上的robots.txt别名为托管在不同位置的限制性robots.txt吗

我在公共互联网上有一个临时服务器,运行一些网站的生产代码副本。我真的不喜欢临时站点被索引

有没有办法在登台服务器上修改httpd.conf以阻止搜索引擎爬虫


更改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
our
DocumentRoot/var/www/html
,这是错误的,因为我们使用的是
/var/www/vhost
,尽管这仍然有效。我们将vhost包含在
include
中,并带有其
httpd include.conf
文件的路径。我为每个vhost都位于其根目录中。并且
httpd.conf
我的vhost中只有一个文件的别名。当您希望将某些API公开给不支持HTTP身份验证的不同服务时,这种方法存在问题。在这种情况下,您必须为特定主机禁用它,这可能会导致时间混乱。