Изучаем Urlrewrite

В битриксе часто приходиться помучиться при настройки ЧПУ, особенно при настройки комплексных компонентов. Что бы решить эту проблему, надо разобраться с файлом под названием urlrewrite.php который лежит в корневой папки сайта.

 '#^/bitrix/services/ymarket/#',
    'RULE' => '',
    'ID' => '',
    'PATH' => '/bitrix/services/ymarket/index.php',
    'SORT' => 100,
  ),

  array (
    'CONDITION' => '#^/baza-znaniy/',
    'RULE' => '',
    'ID' => '',
    'PATH' => '/baza-znaniy/index.php',
    'SORT' => 100,
  ),
  array (
    'CONDITION' => '#^/baza-znaniy/([a-zA-Z\\.\\-_]+)/?.*#',
    'RULE' => 'SECTION_CODE=$1',
    'ID' => '',
    'PATH' => '/baza-znaniy/list.php',
    'SORT' => 200,
  ),
  array (
    'CONDITION' => '#^/baza-znaniy/([a-zA-Z\\.\\-_]+)/([a-zA-Z\\.\\-_]+)/?.*#',
    'RULE' => 'SECTION_CODE=$1&ELEMENT_CODE=$2',
    'ID' => '',
    'PATH' => '/baza-znaniy/detail.php',
    'SORT' => 200,
  ),
);

Примерно так выглядит файл urlrewrite.php.Каждый элемент в массиве $arUrlRewrite – это, отдельное правильно, где
CONDITION – условие выполнения правила. Записывается правилами регулярного выражения.
PATH – адрес физической страницы, к которой мы реально будет обращаться
RULE – правило замены. Его может не быть. В нем пишутся названия параметров и их значения из регулярного выражения, которые будут передаваться на физический адрес (PATH).
Еще правило может содержать параметр ID, этот параметр содержит название компонента, который добавил данное правило. Как правило это название комплексного компонента.

Давайте рассмотрим на примере правило

array(
	"CONDITION"	=>	"#^/blog/post/([a-zA-Z0-9\\.\\-_]+)/?.*#",
	"RULE"	=>	"ELEMENT_CODE=$1",
	"PATH"	=>	"/blog/post.php",
)

Оно отвечает за обработку адресов /blog/post/<Символьный_код_темы>/. Кода пользователь открывает страницу со схожим адресом, он попадает на скрипт /blog/post.php, которому передается символьный код темы в переменной ELEMENT_CODE.

Думаю это понятно, теперь рассмотрим некоторые нюансы, связанные с работой файла urlrewrite.php:
Если вам необходимо сделать обработку адресов для новостей таким образом, чтобы по адресу /news/10/ открывался раздел новостей с ID = 10, а по адресу /news/10/255/ сама новость с ID = 255, то менее часто срабатываемое правило для /news/10/255/ необходимо поместить ‘выше’, чем правило для /news/10/. Другими словами: каждое правило – это элемент массива $arUrlRewrite, и ключ массива для правила /news/10/255/ должен быть меньше, чем ключ массива для правила /news/10/. Иначе правило /news/10/255/ никогда не сработает и у вас будет постоянно открываться раздел новости, вместо самой новости. Это связано с тем, что битрикс обрабатывает правила, начиная с самого начала массива и, если условие правила соответствует запрашиваемому адресу, то он берет его и останавливается на этом.

Вторая ошибка, которая может возникнуть, связана с сортировкой массива $arUrlRewrite. Каждый раз, когда вы пересохраняете настройки комплексного компонента, битрикс обновляет правила компонентов в urlrewrite.php (правила, содержание параметр ID), а также сортирует(!) элементы массива по длине условия (CONDITION). Из-за этого некоторые правила могут начать перекрывать друг-друга. Чтобы избежать такой ситуации, у добавленных правил n-раз дописывается .* в конец условия, таким образом мы устанавливаем длину условия для каждого правила и впредь можем не беспокоиться об этой сортировке.

Продолжая использовать веб- сайт beta-code.ru, вы даете согласие на обработку файлов cookie, пользовательских данных (сведения о местоположении; тип и версия ОС; тип и версия Браузера; тип устройства и разрешение его экрана; источник откуда пришел на сайт пользователь; с какого сайта или по какой рекламе; язык ОС и Браузера; какие страницы открывает и на какие кнопки нажимает пользователь; ip-адрес) в целях функционирования сайта, проведения ретаргетинга и проведения статистических исследований и обзоров. Если вы не хотите, чтобы указанные данные обрабатывались, покиньте сайт.
Принять