Полный цикл в digital

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

Обработка адресов UrlRewrite применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указаному адресу. Например, можно задать настройки обработки адресов, чтобы скрипт в файле /folder/index.php, отвечающий по адресу:

/folder/index.php?id=15

Отвечал по адресу:

/folder/item/15/

Адрес, по которому будет отвечать скрипт, не должен физически существовать на сервере. Если такой адрес физически существует, то будет вызван скрипт по этому адресу. Система обработки адресов запущена в этом случае не будет.

Правила обработки

Правила обработки адресов настраиваются отдельно для каждого сайта и хранятся в корне сайта в файле urlrewrite.php. Файл содержит массив $arUrlRewrite, каждая запись которого является правилом обработки адреса. Файл urlrewrite.php имеет следующий вид:

$arUrlRewrite=array (
0 => 
array (
'CONDITION' => '#^/blog/htaccess/([0-9a-zA-Z-]+)/[\\?]?[0-9a-zA-Z=_-]*#',
'RULE' => 'CODE=$1',
'ID' => '',
'PATH' => '/blog/htaccess/detail.php',
'SORT' => 100,
),
);

Каждый элемент в массиве $arUrlRewrite это, как вы уже могли понять, отдельное правильно, где:

  1. CONDITION условие выполнения правила, записывается правилами регулярного выражения
  2. RULE правило замены, его может не быть. В нем пишутся названия параметров и их значения из регулярного выражения, которые будут передаваться на физический адрес PATH
  3. ID этот параметр содержит название компонента, который добавил данное правило. Как правило это название комплексного компонента
  4. PATH адрес физической страницы к которой реально будет обращение
  5. SORT сортировка правила в массиве, для правильной сортировки нужно проставить числа в нужном порядке в самом файле urlrewrite.php и сохранить изменения, после сохранения файла нужно запустить Пересоздание правил в административном разделе

Настройка ЧПУ для вывода страниц через компонент

Для начала в настройках инфоблока пропишем шаблоны ссылок на разделы и товары:

Затем в корне сайта создадим файлик urlrewrite.php:

$arUrlRewrite=array (
0 => 
array (
'CONDITION' => '#^/blog/htaccess/([0-9a-zA-Z-]+)/[\\?]?[0-9a-zA-Z=_-]*#',
'RULE' => 'CODE=$1',
'ID' => '',
'PATH' => '/blog/htaccess/detail.php',
'SORT' => 100,
),
);

В файле detail.php подключен news.detail, в index.php — шаблон компонента news.list.

Незабудем в настройках компонента news.detail добавить параметр "Код новости" для правильной обработки:

Подключение системы обработки адресов

Перед началом использования система обработки адресов должна быть подключена на сайте.

Если на веб-сервере настроена обработка ошибки 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>

Работа с utm-метками

Если почитать документацию, то можно увидеть, что condition для обработчика рекомендуется писать в виде:

#^/blog/(\w+)/#

Этот подход плох тем, что к такому адресу не добавить utm-метки. А в режиме администрирования битрикс сам добавляет GET-параметры страницы, что приводит к невалидности страницы Элемент не найден в случае компонента bitrix:catalog.section.

В простом случае можно дописать правило таким образом, что с GET-параметрами админки и utm-метками страница валидна, но также она будет валидна с мусором. Например, ссылка /blog/page/blablabla будет валидной и страница откроется, однако тут должна быть 404 ошибка. Потенциально это может привести к страницам-дублям в поисковиках, а этого стоит избегать:

#^/blog/(\w+)/.*#

Для правильной работы стоит писать правило так, что бы страница была валидной в чистом виде и с GET-параметрами :

#^/blog/(\w+)/($|\?.+$)#
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг