+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


В предыдущем выпуске (ссылка) мы обещали рассказать, как бороться с автоматической сортировкой правил обработки адресов, которую утраивает «Битрикс» при сохранении настроек комплексного компонента. Итак, два совета от выдающихся гуру «Битрикс»:

 
1. Короткое и простое решение от Максима Махнюка

Как известно, в результате автоматической сортировки правила располагаются по убыванию длины строки условия CONDITION. Максим предлагает увеличивать длину более важных условий за счет незначащих символов (комментариев). Например:

Последнее условие нужно поднять наверх:

<?
$arUrlRewrite = array(
array(
"CONDITION" => "#^/некоторое регулярное выражение.. ./$#",
...
),
array(
"CONDITION" => "#^/регулярное выражение.. ./$#",
...
),
array(
"CONDITION" => "#^/выражение.. ./$#",
...
),
);
?>

Для этого нужно изменить код

   array(
"CONDITION" => "#^/выражение.. ./$#",
...
),

Сделав его таким

array(
"CONDITION" => "{^/(?#_________________________)выражение.. ./$}",
...
),

И после следующей автоматической сортировки получим нужный порядок записей

 
<?
$arUrlRewrite = array(
array(
"CONDITION" => "{^/(?#_________________________)выражение.. ./$}",
...
),
array(
"CONDITION" => "#^/некоторое регулярное выражение.. ./$#",
...
),
array(
"CONDITION" => "#^/регулярное выражение.. ./$#",
...
),
);
?>

 

2. Надежное и элегантное решение от Романа Забродина

Роман решил, что проще сделать собственный urlrewrite.php с преферансом и тестировщицами. Нет, кроме шуток.

Первым шагом создается файл my_urlrewrite.php, который и содержит нужные правила в нужном порядке

Вторым шагом в 404.php строка кода

include_once($_SERVER['DOCUMENT_ROOT'].' /bitrix/modules/main/include/urlrewrite.php');

заменяется на

include_once($_SERVER['DOCUMENT_ROOT'].'/include/my_urlrewrite.php');

Третьим шагом в /include/ создается копия /bitrix/modules/main/include/urlrewrite.php с именем my_urlrewrite.php, в нем заменяется код:

if(file_exists($_SERVER['DOCUMENT_ROOT']."/urlrewrite.php"))
include($_SERVER['DOCUMENT_ROOT']."/urlrewrite.php");

на следующий

if(file_exists($_SERVER['DOCUMENT_ROOT']."/my_urlrewrite.php"))
include($_SERVER['DOCUMENT_ROOT']."/my_urlrewrite.php");

это решение блокирует автоматическое создание правил. Все правой!

-------------------------------
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» каждый день!

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA