Если на проекте присутствует несколько поддоменов, то рано или поздно вы столкнетесь с вопросом разных файлов robots.txt для каждого из них. Но что делать, если htaccess отказывается менять файл для каждого условия?
Как добавить поддоменам разные robots.txt при помощи PHP в файле htaccess?
Что из себя представляет данный файл? Как правило, его структура выглядит так:
User-Agent: * Disallow: *?* Disallow: /video/ Sitemap: http://site.ru/sitemap.xml
Основная причина, почему в статье речь пойдет про PHP:
1. вам не придется создавать для каждого поддомена свой личный файл robots.txt (это плюс, если таких поддоменов больше 3, например, региональные)
2. на некоторых площадках, htaccess должным образом не обрабатывает правила замены
О каких правилах замены идет речь? Ну, предположим:
RewriteCond %{HTTP_HOST} ^site.ru$ RewriteRule ^robots.txt$ /robots-main.txt [L] RewriteCond %{HTTP_HOST} ^subdomain.site.ru$ RewriteRule ^robots.txt$ /robots-subdomains.txt [L]
А теперь Решение:
Т.к. работаю с битриксом, то в моем случае этот блок настоек выглядит так:
<IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^robots.txt$ robots_for_domain.php [L] ... </IfModule>
Добавили строчку:
RewriteRule ^robots.txt$ robots_for_domain.php [L]
Теперь, код php файла:
<?header("Content-Type:text/plain");?> User-Agent: * Disallow: *?* Disallow: /video/ <?if ($_SERVER['HTTP_HOST'] != 'site.ru') {?> Disallow: /news/ <?}?> Sitemap: http://<?=$_SERVER['HTTP_HOST']?>/sitemap.xml Host: http://<?=$_SERVER['HTTP_HOST']?>
Обратите внимание, для всех поддоменов, добавили проверку, если это не основной сайт (site.ru), то дописываем Disallow:
<?if ($_SERVER['HTTP_HOST'] != 'site.ru') {?> Disallow: /news/ <?}?>
Вот таким нехитрым образом, мы подключили обработку всех robots.txt на один файл.
У этого метода есть только один, на мой взгляд, существенный минус – если вам нужны уникальные строки для одного из поддоменов, то вам необходимо будет при помощи проверок, свич-кэйсов и прочих методов добавить это в php файл.
Но это уже, как говорится, совсем другая история 🙂 .