В ходе работы с клиентским интернет-магазином были реализованы динамические поддомены, и как следствие, возникла необходимость в динамических sitemap.xml и robots.txt.
Изначально планировалось «подправить» компонент генерации карты сайта так, чтобы он сразу формировал их для каждого поддомена. Однако возникло несколько «Но»:
Решение вопроса оказалось довольно простым:
Первое: добавляем правило в location nginx
rewrite ^/sitemap.xml /dinamic-map.php last; rewrite ^/robots.txt /dinamic-robot.php last;
по нему при обращении к sitemap.xml отдаем содержимое dinamic-map.php, а при запросе robots.txt отдаем содержимое dinamic-robot.php
В файлах dinamic-map.php и dinamic-robot.php просто используем встроенную функцию php str_replace.
Содержимое dinamic-map.php
$url = $_SERVER['REQUEST_URI']; $path = parse_url($url, PHP_URL_PATH); $pathParts = explode('/', $path); $lastPart = array_pop($pathParts); $files = $_SERVER['DOCUMENT_ROOT'].'/'.$lastPart; $line = file_get_contents($files); $line = str_replace("sgb.su", $_SERVER["HTTP_HOST"], $line); //sgb.su меняем на свой домен header('Content-Type: text/xml; charset=utf-8'); echo $line;
Содержимое dinamic-robot.php
$files = $_SERVER['DOCUMENT_ROOT'].'/robots.txt'; $line = file_get_contents($files); $line = str_replace("sgb.su", $_SERVER["HTTP_HOST"], $line); //sgb.su меняем на свой домен header('Content-Type: text/html; charset=utf-8'); echo nl2br($line);
Теперь мы имеем динамические не только поддомены, но и файлы карт сайта и robots.txt. Вуаля!