то ждем ваше обращение в нашей службе тех поддержки.
Особенности работы с правилами
Что нужно учитывать |
Система допускает создание нескольких правил для одного файла. Лучше написать два-три понятных правила, чем объединить их через ИЛИ и сделать одно громоздкое правило "на все случаи жизни". Такое правило непонятно как потом менять.
Система сортирует все правила по условиям сначала по алфавиту и длине. Правило с более длинным подходящим условием (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а-пр-яА-ЯёЁ_-]+)/.*#
.
Документация по теме: |
- ЧПУ в компонентах
- Вложенные ЧПУ
- Обработка адресов
- Один из способов включения подразделов инфоблоков в пути для ЧПУ (для версий ниже 12.5).
- Другой способ включения подразделов инфоблоков в пути для ЧПУ (для версий ниже 12.5).
Назад в раздел