我们有一个带有虚拟主机的 XAMPP Apache 开发 Web 服务器,并且想阻止 serps 抓取我们的所有网站。这可以通过 robots.txt 文件轻松完成。但是,我们不想在每个虚拟主机中包含一个禁止 robots.txt 文件,然后在另一台服务器上上线网站时必须将其删除。
有没有办法使用 apache 配置文件将所有 vhost 上对 robots.txt 的所有请求重写到单个 robots.txt 文件?
如果可以的话,您能举个例子吗?我认为应该是这样的:
RewriteEngine On
RewriteRule .*robots\.txt$ C:\xampp\vhosts\override-robots.txt [L]
谢谢!
答案1
Apache mod_alias是为此而设计的,可从核心 Apache 系统获取,并且可以在一个地方进行设置,与 mod_rewrite 不同,几乎没有处理开销。
Alias /robots.txt C:/xampp/vhosts/override-robots.txt
在 apache2.conf 文件中,在所有 vhost 之外,http://example.com/robots.txt- 在其服务的任何网站上,都会输出给定的文件。
答案2
将通用全局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]
答案3
不确定你是否在 Linux 上运行 XAMPP,但如果是的话,你可以创建一个符号链接从所有虚拟主机到同一个 robots.txt 文件,但您需要确保每个虚拟主机的 Apache 配置都允许遵循符号链接(在指令下<Directory>
)Options FollowSymLinks
。
答案4
解决问题的不同方法。
我的集群环境中托管了多个(超过 300 个)虚拟主机。为了保护我的服务器不被爬虫攻击,我将 Crawl-delay 定义为 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>