ЧПУ и 404 в 1С-Битрикс: почему страница не открывается

Ошибка 404 в 1С-Битрикс не всегда означает, что страницы нет. Часто страница физически существует, элемент инфоблока опубликован, компонент подключён, но ЧПУ не совпадает с настройками. В итоге пользователь получает 404, а разработчик начинает искать проблему не там.

Диагностику лучше вести по цепочке: веб-сервер передал запрос в Битрикс, urlrewrite.php нашёл правило, компонент получил правильный SEF_FOLDER, элемент или раздел найден, права доступа позволяют его показать.

Проверить, чей это 404

Сначала нужно понять, кто отдаёт 404: nginx, Apache или сам Битрикс. Если запрос не доходит до PHP, правка компонента не поможет.

curl -I https://example.ru/catalog/test-product/

Если в логах Битрикс пусто, а в error.log веб-сервера есть сообщение по этому URL, начать нужно с конфигурации сервера и передачи запроса в index.php.

tail -n 100 /var/log/nginx/error.log

urlrewrite.php

В Битрикс ЧПУ часто завязано на файл urlrewrite.php. В нём хранится массив правил, которые сопоставляют URL с конкретными компонентами.

cat urlrewrite.php

Типовое правило выглядит примерно так:

[
    'CONDITION' => '#^/catalog/#',
    'RULE' => '',
    'ID' => 'bitrix:catalog',
    'PATH' => '/catalog/index.php',
],

Если для нужного раздела нет правила или оно перекрывается более общим правилом выше, запрос может уйти не туда. После изменения настроек ЧПУ иногда нужно пересохранить компонент или аккуратно обновить правила.

SEF_FOLDER и SEF_URL_TEMPLATES

В комплексных компонентах важно проверить SEF_FOLDER и шаблоны URL. Если каталог лежит в /catalog/, а компонент считает, что корень /shop/, маршруты не совпадут.

$APPLICATION->IncludeComponent(
    'bitrix:catalog',
    '.default',
    [
        'SEF_MODE' => 'Y',
        'SEF_FOLDER' => '/catalog/',
        'SEF_URL_TEMPLATES' => [
            'sections' => '',
            'section' => '#SECTION_CODE_PATH#/',
            'element' => '#SECTION_CODE_PATH#/#ELEMENT_CODE#/',
        ],
    ]
);

Если в шаблоне используется #ELEMENT_CODE#, у элементов должен быть заполнен символьный код. Если используется #ELEMENT_ID#, URL будет другим.

Символьные коды разделов и элементов

Для ЧПУ критичны CODE и SECTION_CODE_PATH. Если код пустой, дублируется или содержит неожиданные символы, страница может не открыться по ожидаемому адресу.

SELECT ID, NAME, CODE, ACTIVE
FROM b_iblock_element
WHERE CODE = 'test-product';

Для разделов:

SELECT ID, NAME, CODE, ACTIVE
FROM b_iblock_section
WHERE CODE = 'test-section';

Если элемент неактивен или раздел выключен, компонент может вернуть 404 даже при правильном маршруте.

Права доступа

Иногда страница открывается администратору, но отдаёт 404 гостю. Тогда нужно проверить права инфоблока, раздела и компонента. В Битрикс права могут выглядеть как проблема ЧПУ, хотя фактически пользователь не имеет доступа.

  • права группы “Все пользователи”;
  • доступ к инфоблоку;
  • активность элемента и раздела;
  • даты активности;
  • фильтр компонента.

Кэш компонента

После изменения ЧПУ, кода элемента или структуры разделов может мешать кэш. Для проверки можно временно отключить кэш компонента или очистить кэш сайта.

'CACHE_TYPE' => 'N',

Отключать кэш на рабочем сайте надолго не стоит. Это только диагностический шаг.

Чек-лист

  1. Понять, 404 отдаёт сервер или Битрикс.
  2. Проверить правило в urlrewrite.php.
  3. Проверить SEF_FOLDER компонента.
  4. Проверить SEF_URL_TEMPLATES.
  5. Проверить CODE раздела и элемента.
  6. Проверить активность и даты активности.
  7. Проверить права доступа для гостя.
  8. Очистить кэш после изменения маршрутов.

404 в Битрикс лучше не лечить случайной правкой urlrewrite.php. Важно понять, на каком слое оборвался маршрут. Тогда исправление обычно оказывается точечным: правило, шаблон URL, символьный код, права или кэш.

Комментарии (0)

Пока нет комментариев. Будьте первым!