Курсы обучения
+7 (351) 777-80-70
2024.05.15

robots.txt и sitemap.txt не работают на Nginx(Без Apache) - Линейка решений INTEC: Universe

Использование правил в urlrewrite.php в Bitrix может помочь настроить редиректы с .txt на .php файлы для robots.txt и sitemap.txt, особенно когда вы используете Nginx без Apache.

Настройка Nginx для использования urlrewrite.php

Чтобы настроить Nginx для работы с urlrewrite.php, выполните следующие шаги:

   1. Настройка конфигурации Nginx:

server {
    listen 80;
    server_name yourdomain.com;

    root /path/to/your/bitrix/site;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        try_files $uri /bitrix/tools/bxapp.php;
        expires max;
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        rewrite ^ /urlrewrite.php last;
    }

    location = /sitemap.txt {
        rewrite ^ /urlrewrite.php last;
    }

    location = /sitemap.xml {
        rewrite ^ /urlrewrite.php last;
    }
}

 

Убедитесь, что ваша конфигурация Nginx настроена для обработки всех запросов через urlrewrite.php. Вот пример конфигурации для Nginx:

В этом примере мы настроили Nginx так, чтобы запросы к robots.txt и sitemap.txt перенаправлялись на urlrewrite.php.

   2. Редактирование файла urlrewrite.php:

<?php
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

$requestUri = $_SERVER['REQUEST_URI'];

if (strpos($requestUri, '/robots.txt') !== false) {
    include($_SERVER["DOCUMENT_ROOT"]."/robots.php");
    exit;
}

if (strpos($requestUri, '/sitemap.txt') !== false) {
    include($_SERVER["DOCUMENT_ROOT"]."/sitemap.php");
    exit;
}

if (strpos($requestUri, '/sitemap.xml') !== false) {
    include($_SERVER["DOCUMENT_ROOT"]."/sitemap.php");
    exit;
}

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
?> 

Теперь нужно настроить urlrewrite.php для обработки этих запросов. Откройте urlrewrite.php и добавьте соответствующие правила:

В этом скрипте мы проверяем, какой файл был запрошен, и включаем соответствующий PHP-скрипт для генерации контента.

Пример PHP-скриптов для генерации контента

robots.php:

<?php
   header("Content-Type: text/plain");
   echo "User-agent: *\n";
   echo "Disallow: /bitrix/\n";
   // Добавьте дополнительные правила по необходимости
?> 

sitemap.php:

<?php
   header("Content-Type: text/xml");
   echo '<?xml version="1.0" encoding="UTF-8"?>';
   echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
   echo '<url><loc>http://yourdomain.com/</loc></url>';
  // Добавьте дополнительные URL по необходимости
   echo '</urlset>';
?> 

Итоги

  • Конфигурация Nginx направляет запросы на urlrewrite.php для обработки.
  • Файл urlrewrite.php проверяет запросы и включает соответствующие PHP-скрипты.
  • PHP-скрипты robots.php и sitemap.php генерируют и выводят контент для robots.txt и sitemap.xml соответственно.

Таким образом, вы можете эмулировать поведение редиректов для robots.txt и sitemap.txt на PHP-скрипты, используя Nginx и Bitrix.

Наши решения