1c-bitrix / bitrix api / development / php · 03.12.2016

Битрикс ЧПУ, правила urlrewrite.php

Самые часто используемые правила ЧПУ в битриксе это страницы детального описания элемента, например /section/125/ 125 это ID элемента, в основном это дополнительные разделы сайта, для магазинов используется комплексный компонент каталога и там 1 правило для всего компонента, но речь не о ней.

Для таких страницы правило выглядет так.

Если 1 числовой идентификатор:

array(
    "CONDITION" => "#^/section/([0-9]+)/#",
    "RULE"      => "ELEMENT_ID=\$1",
    "ID" 	=> "",
    "PATH"	=> "/section/detail.php",
)

Если символьный идентификатор:

array(
    "CONDITION" => "#^/section/([A-z]+)/#",
    "RULE"      => "ELEMENT_CODE=\$1",
    "ID" 	=> "",
    "PATH"	=> "/section/detail.php",
)

Если смешанный, состоящий как из цифр так и из символов:

array(
    "CONDITION" => "#^/section/[A-z-0-9]+)/#",
    "RULE" 	=> "ELEMENT_CODE=\$1",
    "ID" 	=> "",
    "PATH"	=> "/section/detail.php",
)

Но зачастую, особенно новички оставляют эти правильно как показано в примере, но если мы к этом адресу добавим параметры, то идентификатор ломается

/section/125/?param=1

в массиве $_GET вы получите не ELEMENT_ID = 125, а ELEMENT_ID = 125/?param=1, решением может быть функция intval($_GET[‘ELEMENT_ID’]), но правильным решением будет добавить в правило условие (\\?(.*))?#

В итоге, для простых страниц с ЧПУ нужно использовать правило:

array(
    "CONDITION" => "#^/section/([0-9]+)/(\\?(.*))?#",
    "RULE"      => "ELEMENT_ID=\$1",
    "ID" 	=> "",
    "PATH"	=> "/section/detail.php",
)