如何为Apache服务器上的所有域创建robots.txt文件


10

我们有一个带有虚拟主机的XAMPP Apache开发Web服务器设置,并希望阻止Serps爬行我们所有的站点。使用robots.txt文件可以轻松完成此操作。但是,我们宁可不要在每个虚拟主机中都包含一个禁止的robots.txt文件,而当我们在另一台服务器上使用该站点时,则必须将其删除。

apache配置文件是否可以将所有虚拟主机上对robots.txt的所有请求重写为单个robots.txt文件?

如果是这样,您能举个例子吗?我认为应该是这样的:

RewriteEngine On
RewriteRule  .*robots\.txt$         C:\xampp\vhosts\override-robots.txt [L] 

谢谢!


robots.txt不是必需的,某些爬网程序将忽略它。它不应被视为安全功能。如果要隐藏网站直到可以公开使用,请添加身份验证。
Mircea Vutcovici

Answers:


25

Apache mod_alias是为此目的而设计的,可从Apache核心系统中获得,并且与mod_rewrite不同,可以将其设置在一个地方而几乎没有处理开销。

Alias /robots.txt C:/xampp/vhosts/override-robots.txt

在apache2.conf文件中的这一行中,在所有虚拟主机的http://example.com/robots.txt之外 -在其服务的任何网站上,都将输出给定的文件。


这个。Alias在每个<VirtualHost>块中放一个。+1。
史蒂文

谢谢!那很好。我知道有一个简单的解决方案...
Michael Berkompas 2010年

如果要在每个虚拟主机上使用它,则无需将其放入所有虚拟主机中。它可以在全局级别运行,就像默认的/ manual别名可以直接使用一样。
Alister Bulman 2010年

感谢您提供的解决方案,尽管在那里看到C:/令我感到恶心,因为我知道那里还有另一个Windows服务器:)我将编辑内容放入我的modules.conf文件或mods-enabled / alias.conf中,如下所示:Alias /robots.txt /var/www/robots.txt
未确定的时间2012年

1
为了确保即使其他访问控制将阻止该文件,也可以<Location "/robots.txt"> Allow from all </Location>在主<IfModule alias_module>
目录中

1

将公共全局robots.txt文件放在服务器文件系统中的apache进程可以访问的位置。为了便于说明,我假设它位于/srv/robots.txt

然后,要设置mod_rewrite为向请求该文件的客户端提供该文件,请将以下规则放入每个vhost的<VirtualHost>配置块中:

RewriteEngine on
RewriteRule ^/robots.txt$ /srv/robots.txt [NC, L]

如果要将重写规则放入每个目录的.htaccess文件而不是<VirtualHost>块中,则需要稍作修改:

RewriteEngine on
RewriteBase /
RewriteRule ^robots.txt$ /srv/robots.txt [NC, L]

您能否解释一下“将通用的全局robots.txt文件放在服务器文件系统中的apache进程可以访问的某个位置。为了说明起见,我假设它位于/srv/robots.txt。” 更详细吗?我需要了解创建可用于apache进程的目录的意思吗?
Michael Berkompas 2010年

每个站点都包含在testsite.int.devcsd.com这样的文件夹中,位于C:\ xampp \ vhosts下
Michael Berkompas 2010年

@Michael:不要为这个过于复杂的mod_rewrite黑客而烦恼。Alias按照Alister的建议使用。
史蒂文

0

不确定是否在Linux上运行XAMPP,但是如果是,则可以创建从所有虚拟主机到同一robots.txt文件的符号链接,但是需要确保每个虚拟主机的Apache配置为允许遵循符号链接(在<Directory>伪指令下Options FollowSymLinks)。


我宁愿不必编辑每个虚拟主机声明。有30多个...另外,我希望它是自动的跨骑设备,这样在创建新的虚拟主机时我无需做任何事情。
Michael Berkompas 2010年

迈克尔,只需使用sed即可进行大量编辑,这很简单,您绝对不需要手动进行。在底部列出如何执行此操作:blog.netflowdevelopments.com/2012/10/11/…–
未确定的时间

0

不同的解决方案。

我在群集环境中托管了多个(超过300个)虚拟主机。为了保护我的服务器不被爬虫击倒,我定义了10秒钟的抓取延迟。

但是,我无法使用固定的robots.txt配置强制执行所有客户端。如果愿意,我让客户使用自己的robots.txt。

重写模块首先检查文件是否存在。如果不存在,则模块将重写为我的默认配置。下面的代码示例...

为了保持内部重写,应使用别名。我没有定义可能导致某些用户端冲突的新别名,而是将我的robots.txt放在/ APACHE / error /文件夹中,该文件夹已经具有别名作为默认配置。

<Directory /HOSTING/*/*/public_html>
        Options SymLinksIfOwnerMatch
        <Files robots.txt>
                RewriteEngine On
                RewriteCond %{REQUEST_FILENAME} -f [OR]
                RewriteCond %{REQUEST_FILENAME} -d
                RewriteRule (.*) - [L]
                RewriteRule (.*) /error/robots.txt [L]
        </Files>
</Directory>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.