如何為我自己的所有子網域而不是 Apache 上的其他主機提供 robots.txt?

如何為我自己的所有子網域而不是 Apache 上的其他主機提供 robots.txt?

我們開發網站,並將 QA 環境託管在與生產環境相同的伺服器上。我想為所有 QA 網站提供特定的 robots.txt,但不為生產網站提供特定的 robots.txt。我們有一個很多所以我不想更新數百個虛擬主機設定區塊。可以透過網域和所在目錄輕鬆識別 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 虛擬主機設定?

答案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 錯誤代碼,我不確定搜尋機器人如何對此做出反應。我認為還有一種方法可以做到這一點模組重寫和一個匹配的RewriteCond

答案2

你可以這樣做模組別名&如果語句,將其添加到您的伺服器配置中:

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>

If 語句僅適用於 Apache 2.4,而您將問題標記為 2.2 & 2.4 ...所以如果您使用 Apache 2.2,它可能無法解決您的問題

由於您無法/在 if 語句中轉義,因此/被替換為x2F

我沒有測試過,但理論上應該可行。

相關內容