urlrewrite.php связывает произвольные ЧПУ-адреса
с конкретными физическими файлами и компонентами, не завязанными
на реальную структуру каталогов сайта. Разберём формат файла,
работу с параметрами в адресе и типичные ошибки при добавлении
собственных правил.
Расположение и базовая структура
Файл находится в /bitrix/php_interface/urlrewrite.php
(или /local/php_interface/, если используется этот
вариант структуры проекта) и возвращает массив правил:
<?php
$arUrlRewrite = [
[
'CONDITION' => '#^/promo/([0-9]+)/#',
'RULE' => 'ID=$1',
'ID' => '',
'PATH' => '/promo/detail.php',
],
];
CONDITION — регулярное выражение, которому должен
соответствовать реальный запрошенный адрес. RULE —
как извлечённые из скобок группы регулярного выражения
превращаются в GET-параметры. PATH — физический файл,
который фактически обработает запрос.
Пример: ЧПУ для страницы с параметром
<?php
// адрес /catalog/detail/123/ передаёт в detail.php параметр ELEMENT_ID=123
[
'CONDITION' => '#^/catalog/detail/([0-9]+)/#',
'RULE' => 'ELEMENT_ID=$1',
'ID' => '',
'PATH' => '/catalog/detail.php',
],
<?php
// detail.php
$elementId = (int)($_REQUEST['ELEMENT_ID'] ?? 0);
Нужна помощь с Битрикс?
Несколько параметров в одном правиле
<?php
[
'CONDITION' => '#^/catalog/([a-z0-9-]+)/([0-9]+)/#',
'RULE' => 'SECTION_CODE=$1&ELEMENT_ID=$2',
'ID' => '',
'PATH' => '/catalog/detail.php',
],
Порядок групп в регулярном выражении соответствует номерам
$1, $2 и так далее в правиле — при
добавлении новой группы в середину выражения важно пересчитать
все последующие номера, иначе параметры перепутаются местами.
Компонент вместо PHP-файла
<?php
[
'CONDITION' => '#^/vacancies/([0-9]+)/#',
'RULE' => 'ELEMENT_ID=$1',
'ID' => 'bitrix:iblock.element',
'PATH' => '/vacancies/detail.php',
],
Поле ID с указанием компонента влияет на некоторые
системные механизмы (кеш компонента, определение активного
компонента для API), но физический файл в PATH
всё равно обязателен — правило не заменяет сам файл шаблона,
а лишь маршрутизирует к нему запрос.
Порядок правил имеет значение
Правила проверяются последовательно сверху вниз, и срабатывает
первое совпавшее условие. Если более общее правило (например,
с широким шаблоном .*) стоит выше более специфичного,
специфичное правило никогда не сработает — стоит размещать более
узкие условия раньше более широких.
Кеш ЧПУ и его сброс
Битрикс кеширует результат разбора правил ЧПУ для ускорения работы —
после изменения urlrewrite.php изменения обычно
применяются сразу, но при использовании отдельного модуля кеша
ЧПУ (в старых версиях — "Кеш URL") может потребоваться явная очистка
кеша через административную панель, если новое правило неожиданно
не срабатывает сразу после сохранения файла.
Отладка неработающего правила
Если правило не срабатывает, стоит проверить регулярное выражение отдельно от контекста Битрикса (например, в онлайн-тестере регулярных выражений) — частая причина в лишнем или недостающем экранировании специальных символов, особенно точки и слэша внутри самого выражения.
Частые ошибки
- Более общее правило стоит выше специфичного. Специфичное правило никогда не срабатывает.
- Номера групп $1, $2 не пересчитаны после правки регулярки. Параметры в PATH получают неверные значения.
- PATH указывает на несуществующий файл. Правило совпадает, но обработчик отсутствует — белый экран или 404 вместо ожидаемой страницы.
- Ожидание мгновенного эффекта при активном кеше ЧПУ. Требуется явная очистка кеша после изменения файла.
Итог
urlrewrite.php связывает адрес с физическим файлом
через регулярное выражение и позицию совпавших групп в GET-параметрах.
Правила проверяются по порядку сверху вниз, поэтому более специфичные
условия должны идти раньше общих, а изменения иногда требуют
явной очистки кеша ЧПУ, если сайт использует такой механизм.
