Особенности работы с правилами

Урок 94 из 293
Автор: Роберт Басыров
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
4 из 5
Дата изменения: 04.05.2023
Просмотров: 20759
Недоступно в лицензиях:
Текущую редакцию Вашего 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.html
или
/catalog/poleznye_shtuki/ochen-poleznaya-zelenaya-shtuka-s-plazmennym-nabaldashnikom-i-ruchkoi.html
Первый вариант понятнее, получение элемента по 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а-пр-яА-ЯёЁ_-]+)/.*#.

Документация по теме:


Курсы разработаны в компании «1С-Битрикс»
Спасибо, мы рады что смогли помочь Вам. Ниже Вы можете оставить свой отзыв или пожелание :)
Нам жаль это слышать… Но мы постараемся быть лучше!

Мы благодарны Вам за помощь в улучшении документации.

Мы стараемся сделать документацию понятнее и доступнее,
и Ваше мнение важно для нас