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

我们有一个带有虚拟主机的XAMPP Apache开发Web服务器设置,并希望阻止serps爬取我们所有的站点。 这很容易通过robots.txt文件完成。 但是,我们宁愿不在每个虚拟主机中包含一个disallow robots.txt,然后当我们与另一台服务器上的网站一起使用时,必须将其删除。

有没有一种方法与Apacheconfiguration文件重写所有的vhosts robots.txt的所有请求到一个robots.txt文件?

如果是这样,你能举个例子吗? 我认为这将是这样的:

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

谢谢!

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

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

使用apache2.conf文件中的那一行,在所有虚拟主机之外的http://example.com/robots.txt – 在它所服务的任何网站上,都会输出给定的文件。

将您的通用全局robots.txt文件放在服务器的文件系统的某处,这个文件系统可以被apache进程访问。 为了说明起见,我假设它在/srv/robots.txt

然后,要设置mod_rewrite将该文件提供给请求它的客户端,请将以下规则放入每个虚拟主机的<VirtualHost>configuration块中:

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

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

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

不知道你是否在Linux上运行XAMPP,但是如果你是这样,你可以创build一个从所有虚拟主机到同一个robots.txt文件的符号链接 ,但是你需要确保你的每个虚拟主机的Apacheconfiguration是允许遵循符号链接(在<Directory>指令的Options FollowSymLinks )。

解决scheme不同。

我在群集环境中托pipe多个(超过300个)虚拟主机。 为了保护我的服务器免受爬虫的攻击,我定义了Crawl-delay 10秒。

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

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

为了保持内部重写,应该使用别名。 而不是定义一个新的别名,这可能会导致一些用户方的冲突,我find我的robots.txt里面/ APACHE /错误/文件夹已经有一个别名作为默认configuration。

 <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>