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

Урок 95 из 258
Автор: Роберт Басыров
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
4 из 5
Просмотров: 33679
Дата изменения: 26.11.2024
Недоступно в лицензиях:
Текущую редакцию Вашего 1С-Битрикс можно просмотреть на странице Обновление платформы (Marketplace > Обновление платформы).
Ограничений нет

В уроке дадим вам рекомендации, как лучше писать правила обработки и что стоит учитывать. Так вам будет легче с ними работать.

  Список рекомендаций


  1. Система допускает создание нескольких правил ЧПУ для одного файла. Лучше написать два-три понятных правила, чем объединить их через ИЛИ и сделать одно громоздкое правило «на все случаи жизни». Такое правило непонятно, как потом менять.
  2. Система сортирует все правила по условиям: сначала по алфавиту и длине. Правило с более длинным подходящим условием (CONDITION) применяется первым, как более частное. А затем уже правила с короткими условиями, как более общие.

    Пример: правило для элемента ^/news/([0-9a-zA-Z_-]+)/([0-9]+)/.* будет применяться первым (как правило с более длинным условием) и, если условие не подходит, то применится правило для раздела с ^/news/([0-9a-zA-Z_-]+)/.*.

  3. Рекомендуется всегда добавлять .* в конец Условия, если оно задано. Без «звёздочки» правило не будет работать при использовании параметров в URL. Например, при добавленном параметре ?clear_cache=Y.

  4. Синтаксис регулярных выражений позволяет решать задачу разными способами. Пишите правила единообразно, так как из двух правил для раздела и детального просмотра, имеющих условия ^/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_-]+)/.*.

    Обратите внимание! Придерживаться единообразия при написании правил внутри раздела важнее, чем стараться сократить количество самих правил за счёт использования ИЛИ в условии и непредсказуемо удлиняя их, сбивая сортировку правил.

  5. Сортировка правил по длине условий производится при изменении их через административную часть (Настройки > Настройки продукта > Обработка адресов > Правила обработки), в том числе и когда добавляется через визуальный редактор компонент с ЧПУ. А при обработке ЧПУ-запроса просто перебирается массив правил из файла /urlrewrite.php в той последовательности, в которой они там находятся. И поиск длится до первого совпадения. То есть, если вы вручную изменили массив ЧПУ-правил в /urlrewrite.php и разместили запись с условием #^/news/([0-9a-zA-Z_-]+)/.*# выше #^/news/([0-9a-zA-Z_-]+)/([0-9]+)/.*#, то до второго условия дело никогда не дойдет, несмотря на то, что оно длиннее.
  6. Как лучше формировать ЧПУ элемента в каталоге – по ID или по символьному коду? Зависит от предпочтений. Например можно сформировать ссылку так:
    /catalog/poleznye_shtuki/121.php
    или так
    /catalog/poleznye_shtuki/ochen-poleznaya-zelenaya-shtuka-s-plazmennym-nabaldashnikom-i-ruchkoi.php
    Первый вариант понятнее, его удобнее диктовать и сложнее ошибиться. Да и получение элемента по ID выполняется быстрее, чем по символьному коду. Зато второй вариант гораздо выгоднее с точки зрения SEO, что сейчас очень важно для продвижения сайта.
  7. Если в адресах используются численные значения 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]+)/.*#
  8. Кириллица в URL создаёт дополнительные проблемы: диапазон русских символов не является непрерывным. В этом случае используйте вместо логичного для латиницы условия ^/test/([0-9a-zA-Zа-яА-Я_-]+)/.*# такой вариант: #^/test/([0-9a-zA-Zа-пр-яА-ЯёЁ_-]+)/.*#.


Нам жаль это слышать… Но мы постараемся быть лучше!

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

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