如何为我自己的所有子域提供 robots.txt 服务,但不为 Apache 上的其他主机提供 robots.txt 服务?

如何为我自己的所有子域提供 robots.txt 服务,但不为 Apache 上的其他主机提供 robots.txt 服务?

我们开发网站,并将 QA 环境与生产环境托管在同一台服务器上。我想为所有 QA 网站提供特定的 robots.txt,但不为生产网站提供。我们有一个很多的站点,所以我不想更新数百个 vhost 配置块。QA 站点很容易从域名和所在目录中识别出来。QA 和生产站点分为两个不同的目录。所有 QA 站点都托管在 *.qa.mycompany.com 下。

示例生产:主机:example.org 文档根目录:/var/www/production/example.org

示例 QA:主机:example.qa.mycompany.com 文档根目录:/var/www/qa/example.org

有没有办法配置 Apache 为所有 QA 站点但不为生产站点提供 robots.txt,而不必更新所有 QA vhost 配置?

答案1

您可以添加

<Directory "/var/www/qa/*">
  Redirect permanent robots.txt http://example.com/qa_robots.txt
</Directory>

然后,您可以将 qa-robots.txt 放在全局主机的公共区域,目录块应该将所有 /qa/ 文件夹重定向到它。

搜索引擎也应该遵循此重定向。

除了重定向,您还可以添加

错误文档 404“/var/www/qa_robots.txt”

但这会发送 404 错误代码,我不确定搜索机器人对此有何反应。我认为也可以使用mod_rewrite以及匹配RewriteCond

答案2

你可以这样做mod_alias&If 语句,将其添加到您的服务器配置文件中:

Alias /robots.txt /path/to/robots.txt
Alias /qa_robots.txt /path/to/robots.txt

<If "%{DOCUMENT_ROOT} =~ /(\x2Fvar\x2Fwww\x2Fqa\x2F)/">
RewriteRule ^robots\.txt$  qa_robots.txt
</If>

如果语句仅适用于 Apache 2.4,并且您将问题标记为 2.2 & 2.4 ...因此,如果您使用的是 Apache 2.2,它可能无法解决您的问题

由于您无法/在 if 语句中退出,因此/将其替换为x2F

我没有测试过,但理论上它应该可行。

相关内容