我们有一个带有虚拟主机的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>