Битрикс. Система обработки адресов
20.08.2018
Теги: Apache • CMS • RegExp • SEO • URL • Web-разработка • Битрикс • Настройка • ЧПУ • Шаблон
Обработка адресов (UrlRewrite) применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указаному адресу. Например, можно задать настройки обработки адресов, чтобы скрипт в файле /folder/index.php
, отвечающий по адресу
/folder/index.php?id=15
отвечал также по адресу
/folder/item/15/
Адрес, по которому будет отвечать скрипт, не должен физически существовать на сервере. Если такой адрес физически существует, то будет вызван скрипт по этому адресу. Система обработки адресов запущена в этом случае не будет.
Правила обработки
Правила обработки адресов настраиваются отдельно для каждого сайта и хранятся в корне сайта в файле urlrewrite.php
. Файл содержит массив $arUrlRewrite
, каждая запись которого является правилом обработки адреса. Файл urlrewrite.php
имеет следующий вид:
<?php $arUrlRewrite = array ( array ( 'CONDITION' => '#^/catalog/category/([^/]+?)/\\??(.*)#', 'RULE' => 'SECTION_CODE=$1&$2', 'ID' => 'bitrix:catalog.section', 'PATH' => '/catalog/section.php', 'SORT' => 100, ), array ( 'CONDITION' => '#^/catalog/product/([^/]+?)/\\??(.*)#', 'RULE' => 'ELEMENT_CODE=$1&$2', 'ID' => 'bitrix:catalog.element', 'PATH' => '/catalog/element.php', 'SORT' => 100, ), );
Каждое правило должно содержать уникальное в рамках сайта условие выполнения правила. Условие выполнения записывается в ключ CONDITION
массива и является шаблоном регулярного выражения. Например, условие:
'CONDITION' => '#^/index/([0-9]+)/([0-9]+)/#'
указывает, что данное правило должно применяться для всех адресов, которые начинаются с подстрок вида:
/index/<число>/<число>/
Правило может содержать адрес физически существующего скрипта, который будет подключен при выполнении условия. Этот адрес записывается в ключ PATH
. Например, если в системе обработки адресов зарегистрировано правило:
array( 'CONDITION' => '#^/gallery/#', 'PATH' => '/users/images/index.php', )
и пользователь запросил URL
/gallery/images
которого физически не существует, то система обработки адресов подключит скрипт:
/users/images/index.php
Правило может содержать строку замены, которая записывается в ключ RULE
. Если строка замены установлена, то адрес реально существующего подключаемого скрипта формируется заменой регулярным выражением условия выполнения (шаблона выражения) на конкатенацию физического пути (ключ PATH
) и строки замены (ключ RULE
). Например, если в системе обработки адресов зарегистрировано правило:
array( 'CONDITION' => '#^/forum/([0-9]+)/([0-9]+)/#', 'RULE' => 'mode=read&CID=$1&GID=$2', 'PATH' => '/forum/index.php', )
и пользователем запрошена страница:
/forum/17/23/
то для формирования адреса скрипта, который будет подключен, выполнится код:
$url = preg_replace( '#^/index/([0-9]+)/([0-9]+)/#', '/forum/index.php?mode=read&CID=$1&GID=$2', '/index/17/23/' );
и будет подключен скрипт:
/forum/index.php?mode=read&CID=17&GID=23
Правило может содержать имя компонента, который создал это правило. Это имя записывается в ключ ID
. При автоматическом пересоздании файла правил urlrewrite.php
с помощью средств административной части сайта пересоздаются только правила, у которых заполнен ключ ID
.
Подключение системы обработки адресов
Перед началом использования система обработки адресов должна быть подключена на сайте. Для этого необходимо:
-
если на веб-сервере настроена обработка ошибки 404 (например, для Apache установлена директива
ErrorDocument 404 /404.php
), то надо изменить файл404.php
в корне сервера, вставив в самое начало:include_once $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php';
-
если для Apache используеся модуль
mod_rewrite
, то в.htaccess
надо указать:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] </IfModule>
Поиск: Apache • CMS • RegExp • SEO • URL • Web-разработка • Битрикс • ЧПУ • Шаблон • Настройка