Обработка адресов в 1С-Битрикс: практическое руководство

Обработка адресов (URL Rewrite) — это важнейший инструмент в 1С-Битрикс, позволяющий создавать удобные и понятные ссылки, которые благотворно влияют на юзабилити сайта и его SEO-показатели. В данном руководстве мы разберём основные механизмы перенаправления и переопределения адресов в Bitrix, научимся работать с файлом urlrewrite.php, рассмотрим типовые сценарии и приведём максимум возможных примеров.

Обработка адресов в 1С-Битрикс

1. Зачем нужно управление адресами в 1С-Битрикс?

1С-Битрикс по умолчанию предоставляет ряд возможностей для управления URL, чтобы:

  1. Улучшить SEO: использование «человеко-понятных» ссылок положительно влияет на поисковую выдачу и облегчает индексацию страниц.
  2. Повысить удобство пользователя: короткий и логичный адрес проще запомнить, им проще делиться.
  3. Упрощённая маршрутизация: иногда нужно перенаправлять старые ссылки на новые, сохраняя доступ к контенту и избегая ошибок 404.
  4. Гибкая конфигурация: на крупных сайтах или интернет-магазинах нередко требуются уникальные правила обработки адресов.

2. Основные механизмы обработки URL

В 1С-Битрикс существует две основные составляющие, управляющие логикой URL:

  1. .htaccess Это стандартный файл конфигурации веб-серверов (Apache, Nginx при условии аналогичной поддержки правил переписывания). В нём указываются общие правила, такие как перенаправления с HTTP на HTTPS, удаление «www» и т. д.
  2. urlrewrite.php Это специальный PHP-файл в корне сайта (обычно располагается в папке / или /bitrix/urlrewrite.php), который управляет внутренней логикой переписывания адресов в Bitrix. В этом файле указываются правила, определяющие, какие файлы-обработчики будут запускаться при обращении к конкретному URL.

Взаимодействие .htaccess и urlrewrite.php

  • .htaccess (или конфигурация веб-сервера) первым обрабатывает входящий запрос. Если запрос не подходит под ряд исключений (например, ссылка не ведёт на реальный файл/папку), управление передаётся Bitrix.
  • Bitrix через файл urlrewrite.php проверяет, подходит ли запрос под какие-либо правила внутри массива $arUrlRewrite. Если подходит, то происходит переопределение пути на нужный файл-обработчик.

3. Структура urlrewrite.php

Рассмотрим типовой вид файла urlrewrite.php:

<?php
$arUrlRewrite = array(
    array(
        "CONDITION" => "#^/catalog/([0-9]+)/#",
        "RULE" => "ELEMENT_ID=$1",
        "ID" => "",
        "PATH" => "/catalog/detail.php",
        "SORT" => 100,
    ),
    // Другие правила
);
?>

У каждого элемента массива $arUrlRewrite есть несколько ключей:

  • CONDITION — условие (регулярное выражение), по которому определяется подходящий адрес.
  • RULE — строка, содержащая дополнительные параметры для передачи в скрипт (может быть пустой).
  • ID — используется для встроенных компонентов 1С-Битрикс (например, для ЧПУ новостей), часто бывает пустым при кастомной конфигурации.
  • PATH — указывает путь к файлу, который будет обрабатывать запрос.
  • SORT — приоритет срабатывания правила (чем меньше число, тем выше приоритет).

Пример 1: Простая переадресация на кастомный скрипт

Пусть у нас есть раздел /old/, и мы хотим, чтобы при обращении к любому подадресу ^/old/(.*), пользователи и поисковики автоматически перенаправлялись на скрипт /new/index.php. Можно добавить в urlrewrite.php правило:

$arUrlRewrite = array(
    array(
        "CONDITION" => "#^/old/(.*)#",
        "RULE" => "old_path=$1",
        "ID" => "",
        "PATH" => "/new/index.php",
        "SORT" => 10,
    ),
    // ...
);

В результате, если пользователь введёт в адресную строку что-то вида:

https://ваш_домен/old/articles/novinka.html

Система найдёт совпадение по CONDITION, и, подставив old_path=articles/novinka.html в строку $_GET, передаст запрос на /new/index.php. Внутри index.php можно воспользоваться $_GET['old_path'], чтобы получить исходные данные.


4. Использование регулярных выражений в CONDITION

Ключ CONDITION принимает строку с регулярным выражением, обрамлённую символами # (или другими разделителями). В примерах выше мы использовали:

#^/catalog/([0-9]+)/#

Это означает:

  • ^/catalog/ — адрес должен начинаться с /catalog/.
  • ([0-9]+) — далее должна идти группа из одной или более цифр (в круглых скобках значит, что мы будем передавать содержимое этой группы как параметр).
  • # — окончание регулярного выражения.

Если нужное правило не сработало, значит строка просто не подходит под условие.

Пример 2: Перенос структуры разделов в один скрипт

Предположим, у нас есть структура /blog/<Категория>/<Подкатегория>/<Статья>.html, и мы хотим обрабатывать её одним скриптом blog.php. Тогда можно добавить правило:

array(
    "CONDITION" => "#^/blog/([^/]+)/([^/]+)/([^/]+)\\.html#",
    "RULE" => "category=$1&subcategory=$2&article=$3",
    "ID" => "",
    "PATH" => "/blog.php",
    "SORT" => 100,
),
  • [^/]+ — значит «все символы, кроме /, один и более раз».
  • \\.html — экранированная точка (\\.), затем html, чтобы чётко указать, что адрес заканчивается на .html.
  • В RULE мы указываем названия GET-параметров (category, subcategory, article), через которые в blog.php можно получить часть адреса.

Таким образом, запрос вида

https://ваш_домен/blog/tech/frontend/bitrix-seo.html

будет превращён в вызов:

https://ваш_домен/blog.php?category=tech&subcategory=frontend&article=bitrix-seo

5. Порядок срабатывания правил (SORT)

Ключ SORT отвечает за порядок, в котором будут проверяться правила. Чем меньше число, тем раньше будет происходить проверка. Это важно, чтобы более специфические условия срабатывали до общих.

Пример 3: Делим условия для блога и каталога

$arUrlRewrite = array(
    // Более приоритетное правило для каталога
    array(
        "CONDITION" => "#^/catalog/([a-zA-Z0-9_-]+)/#",
        "RULE" => "ELEMENT_CODE=$1",
        "PATH" => "/catalog/detail.php",
        "SORT" => 10,
    ),
    // Далее правило для блога
    array(
        "CONDITION" => "#^/blog/([^/]+)/#",
        "RULE" => "ARTICLE_CODE=$1",
        "PATH" => "/blog/detail.php",
        "SORT" => 20,
    ),
    // И т. д.
);

Здесь мы хотим, чтобы при обращении к /catalog/что-то срабатывало правило для каталога. Поэтому ему ставим SORT=10. А правило для блога получит приоритетом ниже — SORT=20.


6. Примеры с готовыми компонентами 1С-Битрикс

При использовании компонентов «Новости» или «Каталог» (особенно в режимах ЧПУ) 1С-Битрикс может автоматически генерировать правила в urlrewrite.php. Например, при создании «Новостей» для ЧПУ может появиться правило вида:

array(
    "CONDITION" => "#^/news/([0-9a-zA-Z_-]+)/#",
    "RULE" => "ELEMENT_CODE=$1",
    "ID" => "bitrix:news.detail",
    "PATH" => "/news/index.php",
    "SORT" => 100,
),
  • ID здесь хранит идентификатор компонента bitrix:news.detail, чтобы система понимала, с каким компонентом работать.
  • По сути, всё равно происходит переадресация на /news/index.php, но уже со своими настройками компонента и параметрами.

Если у вас возникнет потребность настроить собственную логику ЧПУ и переопределить стандартные правила, вы можете вручную править CONDITION, RULE, PATH, не забывая о приоритете.


7. Работа с .htaccess

Хотя основная логика в 1С-Битрикс лежит в urlrewrite.php, не следует забывать и о файле .htaccess. В нём задаётся базовое перенаправление:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # Перенаправление со старого домена
    RewriteCond %{HTTP_HOST} ^old-domain\\.ru [NC]
    RewriteRule ^(.*)$ https://new-domain.ru/$1 [R=301,L]

    # Удаляем www (или наоборот, добавляем)
    RewriteCond %{HTTP_HOST} ^www\\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

    # Основной блок для Bitrix
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php [L]
</IfModule>
  • RewriteCond проверяет различные условия (например, что запрашиваемый файл не существует).
  • RewriteRule производит собственно перенаправление.
  • Чаще всего этот блок остаётся «как есть», чтобы передавать управление в Bitrix, а локальные правила для конкретных сценариев (например, переадресация со старого домена) добавляются выше основного блока.

Пример 4: Перенаправление каталога изображений на поддомен

Предположим, вы решили, что все изображения должны обслуживаться через поддомен img.site.ru, и хотите перенаправлять все запросы из /upload/ на него:

RewriteCond %{HTTP_HOST} !^img\\.site\\.ru$ [NC]
RewriteCond %{REQUEST_URI} ^/upload/
RewriteRule ^(.*)$ https://img.site.ru/$1 [R=301,L]

Важно помнить: если такие картинки должны физически храниться на другом сервере, потребуется дополнительная конфигурация DNS/серверов. Однако при простом распределении ссылок можно обойтись подобным редиректом.


8. Практические примеры правил в urlrewrite.php

Рассмотрим несколько практических вариантов, часто встречающихся при разработке:

8.1. Перенаправление на раздел с учётом языка

Иногда требуется обрабатывать запросы по языковым префиксам, например /en/, /de/, /fr/:

array(
    "CONDITION" => "#^/(en|de|fr)/catalog/([0-9a-zA-Z_-]+)/#",
    "RULE" => "lang=$1&ELEMENT_CODE=$2",
    "ID" => "",
    "PATH" => "/local/pages/catalog_detail.php",
    "SORT" => 50,
),

Как это работает:

  • Первые круглые скобки (...) задают группу (здесь — (en|de|fr)), значит будут приниматься URL, начинающиеся с /en/, /de/, /fr/.
  • Вторые круглые скобки ([0-9a-zA-Z_-]+) указывают, что там может быть любой набор букв, цифр, символов «-» или «_».
  • В RULE мы прописываем lang=$1&ELEMENT_CODE=$2, чтобы потом в $_GET получить язык и код элемента.

8.2. Различные правила для GET-параметров

Допустим, у нас по умолчанию страница /search.php?type=products&sort=asc, но мы хотим, чтобы пользователь видел /search/products/asc/. Добавляем:

array(
    "CONDITION" => "#^/search/([a-z]+)/([a-z]+)/#",
    "RULE" => "type=$1&sort=$2",
    "ID" => "",
    "PATH" => "/search.php",
    "SORT" => 60,
),

Теперь запрос

https://ваш_домен/search/products/asc/

превратится в

https://ваш_домен/search.php?type=products&sort=asc

8.3. Переопределение отдельных страниц

Если требуется перенести страницу /about/contacts.php на /contacts/, можно прописать:

array(
    "CONDITION" => "#^/contacts/#",
    "RULE" => "",
    "ID" => "",
    "PATH" => "/about/contacts.php",
    "SORT" => 70,
),

В результате все запросы вида:

https://ваш_домен/contacts/

обработает файл /about/contacts.php.


9. Как проверить работу правил переписывания?

После внесения изменений в urlrewrite.php или .htaccess стоит:

  1. Очистить кеш 1С-Битрикс. Для этого можно воспользоваться административной панелью (Раздел «Настройки» → «Инструменты» → «Очистка кеша»).
  2. Проверить правила. Введите в браузере URL, подходящий под новое правило. Убедитесь, что открывается нужная страница/скрипт.
  3. Посмотреть логи (если настроено логирование). В системном логе (например, error_log) может отобразиться причина, если правило не сработало.

Советы по отладке

  • Временно отключите другие правила: если не уверены, какое правило может перехватывать запрос раньше, закомментируйте остальные, кроме одного нужного.
  • Используйте инструменты разработчика: например, в браузере (Chrome, Firefox) можно посмотреть вкладку «Network» и отследить коды ответов (301, 302, 200, 404 и т. д.).
  • Проверяйте регулярные выражения онлайн: существуют сайты для быстрой проверки RegEx. Убедитесь, что ваш шаблон корректно парсит строку.

10. Рекомендации по SEO при настройке адресов

  1. Используйте ЧПУ (человеко-понятные URL): вместо page.php?id=100 лучше articles/bitrix-rewrite.
  2. 301 редиректы на новые адреса: если структура меняется, обязательно используйте редиректы с кодом 301. Так поисковые роботы поймут, что страница перемещена навсегда, а не пропала.
  3. Следите за дублированием: не допускайте, чтобы один и тот же контент был доступен по разным адресам без необходимости.
  4. Короткие адреса: не стоит чрезмерно усложнять URL вложенностью или дополнительными параметрами.

11. Заключение

Работа с адресами (URL Rewrite) в 1С-Битрикс позволяет гибко настраивать маршрутизацию и внешний вид ссылок, что крайне важно как для SEO, так и для удобства пользователей. Ключевым файлом для управления правилами является urlrewrite.php, а его связка с файлом .htaccess (или конфигурацией веб-сервера) даёт мощный инструмент для создания «чистых» и функциональных адресов.

Основные моменты, которые стоит помнить:

  • Всегда проверяйте порядок правил и приоритет (SORT).
  • Регулярные выражения дают широкие возможности для гибкой настройки.
  • Не забывайте про SEO: используйте 301 редиректы и удобочитаемые адреса.
  • После всех изменений проверяйте работу правил и очищайте кеш.

Применяя описанные примеры и практики, вы сможете уверенно настраивать обработку адресов на сайте, сделанном на 1С-Битрикс, и добиваться максимально удобных URL для ваших посетителей и поисковых систем.

Теги:  руководство

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Модули и компоненты для «1С-Битрикс»

оценка производится на основе предоставленного Технического Задания

от 20 000 рублей
Разработка дополнительных модулей для 1С-Битрикс, расширение функционала, внедрение любых решений, требующихся для выполнения ваших бизнес-задач.

* стоимость зависит от конкретной задачи, ее объема и сложности выполняемых работ.

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.