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

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

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

相关内容