Администратор. Базовый
Основы администрирования
Система обработки адресов и ЧПУ
Особенности работы с правилами
Особенности работы с правилами
Урок
95
из
258
Автор:
Роберт Басыров
Сложность урока:
4 из 5
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
Просмотров:
33325
Дата изменения:
15.10.2024
Недоступно в лицензиях:
Ограничений нет
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
В уроке дадим вам рекомендации, как лучше писать правила обработки и что стоит учитывать. Так вам будет легче с ними работать.
Список рекомендаций
- Система допускает создание нескольких правил ЧПУ для одного файла. Лучше написать два-три понятных правила, чем объединить их через ИЛИ и сделать одно громоздкое правило «на все случаи жизни». Такое правило непонятно, как потом менять.
- Система сортирует все правила по условиям: сначала по алфавиту и длине. Правило с более длинным подходящим условием (CONDITION) применяется первым, как более частное. А затем уже правила с короткими условиями, как более общие.
Пример: правило для элемента
^/news/([0-9a-zA-Z_-]+)/([0-9]+)/.*
будет применяться первым (как правило с более длинным условием) и, если условие не подходит, то применится правило для раздела с^/news/([0-9a-zA-Z_-]+)/.*
. - Рекомендуется всегда добавлять
.*
в конец Условия, если оно задано. Без «звёздочки» правило не будет работать при использовании параметров в URL. Например, при добавленном параметре?clear_cache=Y
. - Синтаксис регулярных выражений позволяет решать задачу разными способами. Пишите правила единообразно, так как из двух правил для раздела и детального просмотра, имеющих условия
^/news/([0-9a-zA-Z_-]+)/.*
и^/news/([\w-]+)/([\d]+)/.*
не понятно, какое из правил сработает первым, поскольку длина обоих правил 26 символов и оба начинаются с /news/.Если правило для детального просмотра элемента написано
^/news/([\w-]+)/([\d]+)/.*
, то и правило для просмотра раздела нужно писать аналогично^/news/([\w-]+)/.*
, чтобы правила не перемешивались при автоматической сортировке. Или, если писать для просмотра элемента^/news/([0-9a-zA-Z_-]+)/([0-9]+)/.*
, то тогда и для раздела использовать^/news/([0-9a-zA-Z_-]+)/.*
.Обратите внимание! Придерживаться единообразия при написании правил внутри раздела важнее, чем стараться сократить количество самих правил за счёт использования ИЛИ в условии и непредсказуемо удлиняя их, сбивая сортировку правил. - Сортировка правил по длине условий производится при изменении их через административную часть (Настройки > Настройки продукта > Обработка адресов > Правила обработки), в том числе и когда добавляется через визуальный редактор компонент с ЧПУ. А при обработке ЧПУ-запроса просто перебирается массив правил из файла /urlrewrite.php в той последовательности, в которой они там находятся. И поиск длится до первого совпадения. То есть, если вы вручную изменили массив ЧПУ-правил в /urlrewrite.php и разместили запись с условием
#^/news/([0-9a-zA-Z_-]+)/.*#
выше#^/news/([0-9a-zA-Z_-]+)/([0-9]+)/.*#
, то до второго условия дело никогда не дойдет, несмотря на то, что оно длиннее. - Как лучше формировать ЧПУ элемента в каталоге – по ID или по символьному коду? Зависит от предпочтений. Например можно сформировать ссылку так:
/catalog/poleznye_shtuki/121.php
или так
/catalog/poleznye_shtuki/ochen-poleznaya-zelenaya-shtuka-s-plazmennym-nabaldashnikom-i-ruchkoi.php
Первый вариант понятнее, его удобнее диктовать и сложнее ошибиться. Да и получение элемента по ID выполняется быстрее, чем по символьному коду. Зато второй вариант гораздо выгоднее с точки зрения SEO, что сейчас очень важно для продвижения сайта. - Если в адресах используются численные значения ID элемента (
/main/news/12/
), то возможна ситуация, когда численное значение будет иметь и символьный код раздела. В этом случае правило сработает неправильно. Для детальных страниц лучше использовать такой принцип:/[секции]/элемент.php
, тогда и проблем с ЧПУ не будет. Например, лучше использовать условие#^/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9]+)\.php.*#
, чем условие#^/([0-9a-zA-Z_-]+)/([0-9a-zA-Z_-]+)/([0-9]+)/.*#
- Кириллица в URL создаёт дополнительные проблемы: диапазон русских символов не является непрерывным. В этом случае используйте вместо логичного для латиницы условия
^/test/([0-9a-zA-Zа-яА-Я_-]+)/.*#
такой вариант:#^/test/([0-9a-zA-Zа-пр-яА-ЯёЁ_-]+)/.*#
.
Материалы по теме
- Документация:
- Уроки:
- ЧПУ в компонентах (курс «Разработчик Bitrix Framework»);
- Вложенные ЧПУ (курс «Контент-менеджер»).
- Полезные статьи:
Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас
и Ваше мнение важно для нас
Курсы разработаны в компании «1С-Битрикс»