Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
то ждем ваше обращение в нашей службе тех поддержки.
В предыдущем выпуске (ссылка) мы обещали рассказать, как бороться с автоматической сортировкой правил обработки адресов, которую утраивает «Битрикс» при сохранении настроек комплексного компонента. Итак, два совета от выдающихся гуру «Битрикс»:
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");
это решение блокирует автоматическое создание правил. Все правой!
-------------------------------
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» каждый день!
Назад в раздел
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");
это решение блокирует автоматическое создание правил. Все правой!
-------------------------------
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» каждый день!
Назад в раздел
Подписаться на новые материалы раздела: