Полный цикл в 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 в $_REQUEST
  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.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг