Apache 上の他のホストではなく、自分のサブドメインすべてに robots.txt を提供するにはどうすればよいでしょうか?

Apache 上の他のホストではなく、自分のサブドメインすべてに robots.txt を提供するにはどうすればよいでしょうか?

私たちはウェブサイトを開発しており、本番環境と同じサーバーでQA環境をホストしています。すべてのQAサイトに特定のrobots.txtを提供したいのですが、本番サイトには提供したいとは思いません。多くサイトが多数あるため、数百の仮想ホスト構成ブロックを更新する必要はありません。QA サイトは、ドメイン名とディレクトリの両方から簡単に識別できます。QA サイトと実稼働サイトは、2 つの異なるディレクトリにグループ化されています。すべての QA サイトは、*.qa.mycompany.com でホストされています。

サンプルプロダクション: ホスト: example.org ドキュメントルート: /var/www/production/example.org

QA の例: ホスト: example.qa.mycompany.com ドキュメントルート: /var/www/qa/example.org

すべての QA vhost 構成を更新せずに、すべての QA サイトに robots.txt を提供し、実稼働サイトには提供しないように Apache を構成する方法はありますか?

答え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

あなたもできるmod_aliasif文これをサーバーの設定に追加します:

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

テストはしていませんが、理論的には動作するはずです。

関連情報