Здравствуйте, сегодня мы рассмотрим обработку адресов в системе управления сайтом 1С-Битрикс. Обработка адресов UrlRewrite применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указанному адресу. Другими словами, urlrewrite позволяет создавать ЧПУ.
php
$arUrlRewrite = array(
array(
"CONDITION" => "#^/blog/post/([a-zA-Z0-9\\.\\-_]+)/?.*#",
"RULE" => "ELEMENT_CODE=$1",
"PATH" => "/blog/post.php",
),
array(
"CONDITION" => "#^/blog/([a-zA-Z\\.\\-_]+)/?.*#",
"RULE" => "SECTION_CODE=$1",
"PATH" => "/blog/index.php",
),
array(
"CONDITION" => "#^/company/news/(.*)/#", // плохой шаблон, просто до кучи пример с ID
"RULE" => "ELEMENT_CODE=$1",
"ID" => "bitrix:news",
"PATH" => "/company/news/detail.php",
);
);
Примерно так он может выглядеть.
Каждый элемент в массиве $arUrlRewrite – это, как вы уже могли понять, отдельное правильно, где:
1. *CONDITION* – условие выполнения правила. Записывается правилами регулярного выражения;
2. *PATH* – адрес физической страницы, к которой мы реально будет обращаться;
3. *RULE* – правило замены. Его может не быть. В нем пишутся названия параметров и их значения из регулярного выражения, которые будут передаваться на физический адрес (PATH);
4. Еще правило может содержать параметр *ID*, этот параметр содержит название компонента, который добавил данное правило. Как правило это название комплексного компонента.
Давайте рассмотрим на примере правило:
php
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**:
1. Если вам необходимо сделать обработку адресов для новостей таким образом, чтобы по адресу _/news/10/_ открывался раздел новостей с ID = 10, а по адресу _/news/10/255/_ сама новость с ID = 255, то менее часто срабатываемое правило для _/news/10/255/_ необходимо поместить ‘выше’, чем правило для _/news/10/_. Другими словами: каждое правило – это элемент массива $arUrlRewrite, и ключ массива для правила _/news/10/255/_ должен быть меньше, чем ключ массива для правила _/news/10/_. Иначе правило _/news/10/255/_ никогда не сработает и у вас будет постоянно открываться раздел новости, вместо самой новости. Это связано с тем, что битрикс обрабатывает правила, начиная с самого начала массива и, если условие правила соответствует запрашиваемому адресу, то он берет его и останавливается на этом.
2. Вторая ошибка, которая может возникнуть, связана с сортировкой массива $arUrlRewrite. Каждый раз, когда вы пересохраняете настройки комплексного компонента, битрикс обновляет правила компонентов в urlrewrite.php (правила, содержание параметр ID), а также сортирует(!) элементы массива по длине условия (CONDITION). Из-за этого некоторые правила могут начать перекрывать друг-друга. Чтобы избежать такой ситуации, у добавленных правил n-раз дописывается .* в конец условия, таким образом мы устанавливаем длину условия для каждого правила и впредь можем не беспокоиться об этой сортировке.
Visit http://web.archive.org/web/20201201210506/https://ftdev.ru/blog/post/uchimsya-rabotat-s-bitrix-urlrewrite/
