~2 минуты, Опубликовано 26.12.2023

Robots.txt и Sitemap.xml для многоязычных и многорегиональных сайтов

Robots.txt и Sitemap.xml для многоязычных и многорегиональных сайтов

Если вам необходимо сделать robots.txt или sitemap.xml для каждого сайта(домена) уникальным, то вы можете воспользоваться следующим скриптом:

<?
$arHost = explode( ":", $_SERVER["HTTP_HOST"]);
$_SERVER["HTTP_HOST"] = $arHost[0];
$hostname = $_SERVER['HTTP_HOST'];

function getRobots($file) {
    if (!file_exists($file) || !is_readable($file)){
        return false;
    }

    $timestamp = filemtime($file);
    $lastModify = gmdate('D, d M Y H:i:s ', $timestamp) . 'GMT';
    $contentLenght = filesize($file);
    $etag = md5($file . $timestamp);

    header('Content-Type: text/plain');
    header("Content-Length: $contentLenght");
    header("Last-Modified: $lastModify");
    header("ETag: \"{$etag}\"");

    readfile($file);

    return true;
}

$robotsHost = dirname(__FILE__) . "/robots/robots_{$hostname}.txt";
$robotsDefault = dirname(__FILE__) . "/robots.txt";

if(!getRobots($robotsHost) && !getRobots($robotsDefault)) 
{
    header('HTTP/1.0 404 Not Found');
}
?>

Алгоритм работы скрипта:

  1. Определяем текущий домен, он будет лежать в переменной $hostname;
  2. Ищем кастомный файл robots.txt для текущего домена в папке /robots/robots_{$hostname}.txt (Пример: /robots/robots_code-culture.ru.txt);
  3. Если файл существует и доступен для чтения выводим его содержимое с правильными заголовками;

Чтобы при заходе по /robots.txt открывался кастомный файл, необходимо в файле .htaccess добавить следующий правила:

RewriteCond %{REQUEST_FILENAME} robots.txt
RewriteCond %{DOCUMENT_ROOT}/robots.php -f
RewriteRule ^(.*)$ /robots.php [L]

Это правило определит, что мы пытаемся зайти на /robots.txt и подключит скрипт /robots.php, который в свою очередь вернет содержимое нашего кастомного файла.

Для кастомных файлов sitemap.xml

Тут делаем все точно так же, как и с robots. Создаем файл sitemap.php с таким же содержимым, только меняем папку, где искать файлы с /robots/ на /sitemaps/ и добавляем правило в .htaccess

RewriteCond %{REQUEST_FILENAME} sitemap.xml
RewriteCond %{DOCUMENT_ROOT}/sitemap.php -f
RewriteRule ^(.*)$ /sitemap.php [L]

 

Читайте также  Что делать, если забыл пароль от админки Битрикс?

Категории: Bitrix PHP