Бывает что на проекте создано очень много правил для ЧПУ страниц:
разделы, подразделы, детальная товара, сортировки, фильтры, постраничка и т.д. + различные их комбинации, например третья страница раздела с выбранной сортировкой и наложенным фильтром..
При этом очень важно чтобы все правила в файле urlrewrite.php располагались в строго определенном порядке от частных к общим, так как срабатывает первое подошедшее.
Проблема в том что в "Настройка правил обработки адресов" нет поля сортировки и после пересохранения файла, например, автоматического, комплексным компонентом с включенным ЧПУ после редактирования какого-нибудь параметра -- вся логика ЧПУ сайта рушится, вплоть до того что перестают отображаться страницы.
Я придумал такое решение (не затирается при обновлении системы):
[spoiler]
1. создаем файл /my_urlrewrite.php, в который переносим все наши правила.
2. в /404.php меняем:
на:
3. в /include/ создаем копию /bitrix/modules/main/include/urlrewrite.php с именем my_urlrewrite.php, а в нем меняем:
на (забиваем на автоматически создаваемые правила):
либо на (соединяем наши правила и возможные новые):
Минусов пока не вижу.
Возможно задачу можно решить более элегантно. Предлагайте варианты
разделы, подразделы, детальная товара, сортировки, фильтры, постраничка и т.д. + различные их комбинации, например третья страница раздела с выбранной сортировкой и наложенным фильтром..
При этом очень важно чтобы все правила в файле urlrewrite.php располагались в строго определенном порядке от частных к общим, так как срабатывает первое подошедшее.
Проблема в том что в "Настройка правил обработки адресов" нет поля сортировки и после пересохранения файла, например, автоматического, комплексным компонентом с включенным ЧПУ после редактирования какого-нибудь параметра -- вся логика ЧПУ сайта рушится, вплоть до того что перестают отображаться страницы.
Я придумал такое решение (не затирается при обновлении системы):
[spoiler]
1. создаем файл /my_urlrewrite.php, в который переносим все наши правила.
2. в /404.php меняем:
include_once($_SERVER['DOCUMENT_ROOT'].' /bitrix/modules/main/include/urlrewrite.php'); |
на:
include_once($_SERVER['DOCUMENT_ROOT'].'/include/my_urlrewrite.php'); |
3. в /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"); |
либо на (соединяем наши правила и возможные новые):
if(file_exists($_SERVER['DOCUMENT_ROOT']."/my_urlrewrite.php")) include($_SERVER['DOCUMENT_ROOT']."/my_urlrewrite.php"); $MYarUrlRewrite = array(); if(file_exists($_SERVER['DOCUMENT_ROOT']."/urlrewrite.php")) include($_SERVER['DOCUMENT_ROOT']."/urlrewrite.php"); $arUrlRewrite = array_merge($MYarUrlRewrite, $arUrlRewrite); |
Минусов пока не вижу.
Возможно задачу можно решить более элегантно. Предлагайте варианты