Как обслуживать robots.txt для всех моих собственных поддоменов, но не для других хостов на Apache?

Как обслуживать robots.txt для всех моих собственных поддоменов, но не для других хостов на Apache?

Мы разрабатываем веб-сайты и размещаем среду QA на том же сервере, что и производственная среда. Я хочу обслуживать определенный robots.txt для всех сайтов QA, но не для производственных сайтов. У нас естьмногосайтов, поэтому я не хочу обновлять сотни блоков конфигурации vhost. Сайты QA легко идентифицируются как по доменному имени, так и по каталогу, в котором они находятся. Сайты QA и production сгруппированы в двух разных каталогах. Все сайты QA размещены под *.qa.mycompany.com.

Пример производства: хост: example.org docroot: /var/www/production/example.org

Пример QA: хост: example.qa.mycompany.com docroot: /var/www/qa/example.org

Есть ли способ настроить Apache для обслуживания robots.txt для всех сайтов QA, но не для производственных сайтов, без необходимости обновления всех конфигураций виртуальных хостов QA?

решение1

Вы могли бы добавить это

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

Затем вы можете разместить свой qa-robots.txt в общедоступной области на глобальном хосте, блок каталогов должен перенаправить на него все папки /qa/.

Поисковые системы также должны отслеживать это перенаправление.

Вместо перенаправления вы также можете добавить

ErrorDocument 404 "/var/www/qa_robots.txt"

Но это отправит код ошибки 404. Я не уверен, как поисковые роботы реагируют на это. Я думаю, что также может быть способ сделать это сmod_rewriteи соответствующийRewriteCond

решение2

Вы можете сделать это с помощьюmod_alias&Если утверждение, добавьте это в конфигурацию вашего сервера:

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

Я не проверял, но теоретически должно работать.

Связанный контент