Здравствуйте, сегодня мы рассмотрим обработку адресов в системе управления сайтом 1С-Битрикс. Обработка адресов UrlRewrite применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указанному адресу. Другими словами, urlrewrite позволяет создавать ЧПУ.
$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 - это, как вы уже могли понять, отдельное правильно, где:
- 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-раз дописывается
.*
в конец условия, таким образом мы устанавливаем длину условия для каждого правила и впредь можем не беспокоиться об этой сортировке.