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

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

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

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

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

2 ответа

Вы можете добавить это

<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

Вы можете сделать это с помощью выражения mod_alias & If, добавив это на свой сервер conf:

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

Как вы не можете избежать / в заявлении, / заменены на x2F

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

Другие вопросы по тегам