Проблема сортировки правил в urlrewrite.php известна и обсуждается в сообществе. Внесу свою лепту:
Известно, что правила в urlrewrite.php сортируются по убыванию длины условий. Необходимо поднять что-то вверх? Увеличь длину строки, дописав незначимых символов. Эти символы в программировании называются комментариями и в регулярных выражениях они есть.
Как пользоваться:
Нам нужно "поднять" последнее условие вверх, что бы потом Битрикс его не "опустил". Элементарно:
При перестройки правил в админке или при добавлении компонента с ЧПУ порядок не нарушается, комментарии не удаляются, регулярное выражение с точки зрения компилятора не усложняется. Профит?
Данное решение использую уже не помню сколько лет.
P.S. Если данный финт нужно провернуть с правилами у которых есть ID (то есть с теми, которые прописывают сами компоненты), то сотрите его ("ID" => "",) и сделайте правило длиннее. Короткое создастся всё равно, но не будет срабатывать так как перекроется вышестоящим.
Известно, что правила в urlrewrite.php сортируются по убыванию длины условий. Необходимо поднять что-то вверх? Увеличь длину строки, дописав незначимых символов. Эти символы в программировании называются комментариями и в регулярных выражениях они есть.
Как пользоваться:
<? $arUrlRewrite = array( array( "CONDITION" => "#^/некоторое регулярное выражение.. ./$#", ... ), array( "CONDITION" => "#^/регулярное выражение.. ./$#", ... ), array( "CONDITION" => "#^/выражение.. ./$#", ... ), ); ?> |
<?
$arUrlRewrite = array(
array(
"CONDITION" => "{^/(?#_________________________)выражение.. ./$}",
...
),
array(
"CONDITION" => "#^/некоторое регулярное выражение.. ./$#",
...
),
array(
"CONDITION" => "#^/регулярное выражение.. ./$#",
...
),
);
?> |
Данное решение использую уже не помню сколько лет.
P.S. Если данный финт нужно провернуть с правилами у которых есть ID (то есть с теми, которые прописывают сами компоненты), то сотрите его ("ID" => "",) и сделайте правило длиннее. Короткое создастся всё равно, но не будет срабатывать так как перекроется вышестоящим.