В ходе работы с клиентским интернет-магазином были реализованы динамические поддомены, и как следствие, возникла необходимость в динамических 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.
Вуаля!