Как настроить ЧПУ в 1С-Битрикс через urlrewrite и SEF_MODE?

Как настроить ЧПУ в 1С-Битрикс через urlrewrite и SEF_MODE?

Включили SEF_MODE в компоненте новостей или каталога, а детальные страницы отдают 404 от nginx или открывают раздел вместо элемента? На 1С-Битрикс: Управление сайтом (это не Bitrix24) ЧПУ работает цепочкой из трёх слоёв: веб-сервер передаёт запрос в urlrewrite.php, роутер выбирает физический файл, компонент разбирает хвост URL. Ниже – пошаговая настройка .htaccess, SEF_MODE и правил CONDITION/RULE/PATH без путаницы с 301-редиректами.

ЧПУ в Битрикс – это маршрутизация, а не переезд страниц. Веб-сервер (.htaccess или nginx) отправляет "несуществующие" пути в /bitrix/urlrewrite.php; массив $arUrlRewrite выбирает PATH; компонент с SEF_MODE=Y читает символьные коды из URL. Правило создаётся при сохранении страницы с компонентом – после FTP-заливки откройте страницу в редакторе или нажмите "Пересоздать правила". 301 после смены структуры – отдельная задача, не urlrewrite.

ЧПУ (человекопонятный URL) – адрес вида /catalog/smartfony/iphone-15/ вместо /catalog/?SECTION_ID=12&ELEMENT_ID=255. Путать его с редиректами опасно: urlrewrite только "находит" нужный PHP-файл, а не говорит поисковику "страница переехала". Если после миграции с WordPress в .htaccess остался RewriteRule на index.php – Битрикс даже не получит запрос.

Разведите маршрутизацию, редиректы и ЧПУ фильтра

Таблица сравнения: маршрутизация ЧПУ, 301-редиректы, фильтр каталога и страница 404 в Битрикс

Делайте urlrewrite, когда нужны красивые пути к существующим страницам каталога, новостей, блога. Не делайте: пихать в urlrewrite.php правила "старый URL → новый" – для этого есть SEO-модуль и серверные 301.

Задача Инструмент Куда смотреть
Красивый путь /news/release/ SEF_MODE + urlrewrite.php Эта статья
Старый URL → новый после смены структуры 301 (SEO-модуль, .htaccess) 301-редиректы на Битрикс (B48)
ЧПУ в умном фильтре каталога Отдельные шаблоны SEF фильтра умный фильтр (B24)
Страница удалена без замены HTTP 404, не редирект страница 404 (B23)

Рекомендация: сначала добейтесь рабочих ЧПУ через urlrewrite, потом добавляйте 301 для старых адресов. Два слоя на один путь – частая причина циклов и "страница не та".

Настройте цепочку .htaccess или nginx до urlrewrite.php

Схема цепочки маршрутизации: веб-сервер, urlrewrite.php и SEF_MODE компонента

Веб-сервер не знает про каталог Битрикс – он только решает, отдать файл или передать запрос в PHP. Если mod_rewrite выключен или try_files смотрит на index.php – получите 404 от сервера, хотя в админке "ЧПУ включено".

Схема запроса:
Браузер → /catalog/phones/ → сервер не находит папку → /bitrix/urlrewrite.php → совпадение CONDITION → PATH (например /catalog/index.php) → компонент парсит хвост URL

На Apache в корневом .htaccess должен быть блок mod_rewrite с передачей в urlrewrite, а не в index.php:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

На nginx (часто на VPS у Beget или другом провайдере) базовая строка:

try_files $uri $uri/ /bitrix/urlrewrite.php?$args;

Пошаговая проверка после правки конфига:

  1. Откройте терминал и выполните curl -I https://ваш-сайт.ru/catalog/test-chpu/ – смотрите, кто отдал 404 (nginx/Apache или PHP).
  2. Если статус 404 и в теле нет шапки сайта – проблема на слое сервера, urlrewrite ещё не вызывался.
  3. Убедитесь, что в 404.php подключён стандартный include bitrix/modules/main/include/urlrewrite.php.
  4. На shared-хостинге проверьте, что mod_rewrite включён в панели – без него .htaccess молчит.
  5. После смены конфига перезапустите nginx или дождитесь применения .htaccess и сбросьте кеш браузера.

Не делайте: копировать из WordPress правило RewriteRule ^(.*)$ /index.php [L] – оно обходит роутер Битрикс.

Разберите структуру правила в urlrewrite.php

Чеклист полей правила urlrewrite.php: CONDITION, RULE, PATH и пересоздание после FTP

Файл лежит в корне сайта (при многосайтовости – отдельный на каждый сайт). Внутри массив $arUrlRewrite: Битрикс перебирает записи сверху вниз и останавливается на первом совпадении CONDITION.

Поле Назначение Типичная ошибка
CONDITION Регулярка пути, например #^/catalog/# Слишком широкое правило "съедает" детальные
RULE Захват групп из URL (опционально) Пустой RULE там, где нужны параметры
PATH Физический файл: /catalog/index.php Путь к несуществующей странице
ID Имя компонента (bitrix:catalog) Несовпадение с компонентом на странице
SORT Порядок в админке (в файле – позиция в массиве) Раздел выше детальной – откроется список

Делайте: более специфичные CONDITION (детальная страница) выше общих (раздел). Не делайте: править SORT в админке, не понимая, что в файле важен порядок ключей массива.

Включите SEF_MODE и символьные коды в компоненте

Частая боль: "включил ЧПУ в инфоблоке" – а URL всё ещё с ID. SEF_MODE, SEF_FOLDER и SEF_URL_TEMPLATES настраиваются в комплексном компоненте на странице, не в типе инфоблока.

  1. Задайте символьные коды разделам и элементам – см. создание инфоблока (B28).
  2. Откройте страницу каталога или новостей в визуальном редакторе, выберите компонент.
  3. Включите SEF_MODE = Y, укажите SEF_FOLDER (например /catalog/).
  4. В шаблонах URL замените #SECTION_ID# на #SECTION_CODE#, #ELEMENT_ID# на #ELEMENT_CODE#.
  5. Сохраните страницу – правило в urlrewrite.php создастся автоматически.
  6. Проверьте детальную и раздел: оба URL должны отдавать HTTP 200.

Для вывода раздела каталога с корректными путями смотрите гайд по catalog.section (B62). Рекомендация: после смены шаблонов очистите кеш и откройте страницу в режиме инкогнито.

Пересоздайте правила после FTP и для своего компонента

Залили сайт по FTP, включили SEF_MODE в коде – а в urlrewrite.php пусто? Правило появляется при сохранении страницы через API редактора. Альтернатива: Настройки → Настройки продукта → Настройки модулей → Главный модуль → вкладка "Обработка адресов" → "Пересоздать правила".

Для кастомного компонента с ЧПУ – свой компонент (B63): CComponentEngine::ParseComponentPath и ручная запись в urlrewrite или класс UrlRewriterRuleMaker в D7. Делайте бэкап urlrewrite.php перед ручным редактированием – сохранение компонента в админке может перезаписать ваши строки.

Не делайте: править urlrewrite на боевом без бэкапа и без теста на копии. После любой ручной правки – очистка кеша (Настройки → Производительность).

Диагностируйте 404, конфликты правил и мягкий 404 Битрикс

404 от сервера (пустая страница nginx) и "мягкий" 404 Битрикс (статус 200, но шаблон ERROR_404) – разные истории. Первый лечится .htaccess/nginx, второй – настройками компонента и страницей 404 (B23).

  • Детальная открывает раздел – поднимите правило детальной выше в массиве или пересоздайте правила.
  • Все ЧПУ-URL битые – проверьте mod_rewrite и путь к /bitrix/urlrewrite.php.
  • Работает только главная – конфликт с чужим .htaccess после миграции.
  • Многосайтовость – у каждого сайта свой urlrewrite.php в корне документа.

С 2026 года Битрикс продвигает routing_index.php и local/routes/web.php для D7-контроллеров – это параллельная ветка, не замена SEF комплексных компонентов на классическом сайте. Для типового каталога и новостей urlrewrite остаётся рабочим стандартом; routing смотрите, если пишете свои Engine\Controller без физических страниц.

Нужна помощь с диагностикой на боевом проекте – обсудим задачу. Похожие кейсы – в портфолио.

Автор: Максим Мольков, разработчик 1С-Битрикс.
Источники: справка по обработке адресов, курс по ЧПУ и символьным кодам, практика внедрений на CMS.

Частые вопросы

Где лежит urlrewrite.php в Битрикс?

В корне документа сайта (рядом с index.php). При многосайтовости – отдельный файл в корне каждого сайта. Не путайте с /bitrix/urlrewrite.php – это обработчик ядра, а не ваш массив правил.

Чем urlrewrite отличается от правил в .htaccess?

.htaccess только решает: отдать файл или передать запрос в /bitrix/urlrewrite.php. Массив $arUrlRewrite внутри CMS выбирает, какой PHP-файл и компонент обработают путь. Редиректы 301 в .htaccess – другой слой, см. гайд B48.

Почему ЧПУ выдаёт 404, хотя SEF_MODE включён?

Три частые причины: нет RewriteRule на /bitrix/urlrewrite.php, правило не создалось после FTP (сохраните страницу с компонентом), порядок правил в urlrewrite.php – раздел перекрывает детальную. Проверьте curl -I и содержимое urlrewrite.php.

Как добавить правило в urlrewrite вручную?

Откройте urlrewrite.php, добавьте элемент массива с CONDITION, PATH, ID. Либо используйте админку "Обработка адресов", либо UrlRewriterRuleMaker в коде. После правки – бэкап, очистка кеша, проверка детальной и раздела.

Нужно ли включать "Использовать ЧПУ" в настройках продукта?

Галочка в главном модуле – базовое разрешение. Реальные URL задаёт SEF_MODE в компоненте и шаблоны с символьными кодами. Без сохранения страницы с компонентом правило в urlrewrite не появится.

ЧПУ на nginx: что проверить на VPS?

В location для PHP: try_files с fallback на /bitrix/urlrewrite.php$is_args$args, а не на index.php. После смены конфига – nginx -t и reload. На новом VPS удобно сразу взять шаблон конфига у хостера, например Beget, и адаптировать под домен.

Читайте также

Интеграции с 1С и API
1074 6 мин.

Как настроить регистрацию и личный кабинет покупателя на 1С-Битрикс?

Пошаговая настройка регистрации на сайте битрикс: Главный модуль, main.register, system.auth.form и sale.personal.section с историей заказов и 152-ФЗ.
Интеграции с 1С и API
941 6 мин.

Как настроить скидки и промокоды на 1С-Битрикс: правила корзины и купоны

Пошаговый гайд по скидкам в CMS-магазине: скидка на товар, правило корзины от суммы, купоны с лимитом, приоритеты без конфликтов и тестовый заказ. Не Bitrix24.
Интеграции с 1С и API
759 15 мин.

Что такое компонент в Битриксе и как он работает

Каждый разработчик, впервые столкнувшийся с Битриксом, проходит через своеобразный обряд посвящения. Вначале кажется, что это просто CMS, где можно поправить HTML в визуальном редакторе или дописать пару строк CSS. Но однажды наступает момент, когда нужно изменить логику вывода новостей, отфильтровать товары по хитрому свойству или добавить на страницу нечто совершенно новое. И тут он впервые слышит это слово — «компонент». Для многих этот момент становится стеной. Система, казавшаяся понятной, вдруг превращается в черный ящик, полный непонятных файлов и странных переменных. Но стоит лишь раз заглянуть под капот, как эта стена рассыпается, превращаясь в набор удивительно логичных и мощных строительных блоков. Понимание компонентов — это тот самый щелчок, после которого разработка на Битрикс из мучения превращается в творчество.

Эта статья — ваш проводник в мир компонентов «1С-Битрикс». Мы не будем сыпать сухими терминами из документации. Вместо этого мы совершим путешествие: от философии, заложенной в эту архитектуру, до мельчайших деталей её работы. Мы разберем компонент на атомы — его файлы, логику, шаблон, параметры — и соберем обратно, чтобы вы не просто знали, что это, но и глубоко понимали, почему это работает именно так. Это знание — ключ к эффективной и профессиональной разработке на Битрикс.

Интеграции с 1С и API
719 2 мин.

Установка Composer в 1С-Битрикс

Установка Composer в проекте на 1С-Битрикс требует учета особенностей платформы, чтобы обеспечить корректную работу и интеграцию с системой.