Битрикс. Система обработки адресов

20.08.2018

Теги: ApacheCMSRegExpSEOURLWeb-разработкаБитриксНастройкаЧПУШаблон

Обработка адресов (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-разработка • Битрикс • ЧПУ • Шаблон • Настройка

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.