Главная » Разработка Битрикс » Полезное » Как настроить редиректы в Битрикс: 301 Redirect через .htaccess и Nginx

Как настроить редиректы в Битрикс: 301 Redirect через .htaccess и Nginx

Редиректы — важная часть технической оптимизации сайта на 1С-Битрикс. Они используются при изменении адресов страниц, переезде сайта на HTTPS, смене домена, удалении старых URL, изменении структуры каталога и устранении дублей.

Правильно настроенный 301 редирект сообщает браузеру и поисковым системам, что страница окончательно переехала на новый адрес.

В этой статье разберём, как настроить редиректы в Битрикс через .htaccess, Nginx и urlrewrite.php, а также рассмотрим готовые примеры кода.

Важно: для постоянных SEO-редиректов в Битрикс обычно лучше использовать серверный редирект через .htaccess или конфигурацию Nginx. Не стоит реализовывать простые редиректы через PHP, если их можно выполнить на уровне веб-сервера.

Какие бывают редиректы

Основные HTTP-коды перенаправления:

  • 301 Moved Permanently — страница окончательно перемещена;
  • 302 Found — временное перенаправление;
  • 307 Temporary Redirect — временный редирект с сохранением HTTP-метода;
  • 308 Permanent Redirect — постоянный редирект с сохранением HTTP-метода.

Для SEO-перенаправлений обычно используется 301.

https://site.ru/staraia-stranica/
        ↓ 301
https://site.ru/novaya-stranica/

Пользователь автоматически попадёт на новый URL, а поисковая система получит информацию о постоянном переносе страницы.

Где настраивать редиректы в Битрикс

В зависимости от конфигурации сервера редиректы можно настроить несколькими способами.

Apache

Основной вариант — файл:

.htaccess

Обычно он находится в корневой директории сайта.

Nginx

Если сайт работает на Nginx, редиректы лучше задавать непосредственно в конфигурации виртуального хоста.

urlrewrite.php

В старых проектах Битрикс может использоваться файл:

/bitrix/urlrewrite.php

Этот механизм отвечает за маршрутизацию ЧПУ, а не является оптимальным местом для обычных SEO-редиректов.

Нужна помощь с Битрикс?





    Как сделать простой 301 редирект в Битрикс

    Самый простой вариант через .htaccess:

    Redirect 301 /old-page/ /new-page/

    Например:

    Redirect 301 /uslugi/sozdanie-saita/ /uslugi/razrabotka-saitov/

    Теперь при открытии:

    https://site.ru/uslugi/sozdanie-saita/

    сервер отправит пользователя на:

    https://site.ru/uslugi/razrabotka-saitov/

    301 редирект через RewriteRule

    Более универсальный вариант:

    RewriteEngine On
    
    RewriteRule ^old-page/$ /new-page/ [R=301,L]

    Например:

    RewriteEngine On
    
    RewriteRule ^blog/staraya-statya/$ /blog/novaya-statya/ [R=301,L]

    Здесь:

    • ^blog/staraya-statya/$ — старый URL;
    • /blog/novaya-statya/ — новый URL;
    • R=301 — постоянный редирект;
    • L — прекратить обработку следующих правил.

    Важный момент: порядок правил в .htaccess

    Это одна из самых частых причин проблем с редиректами в Битрикс.

    Правила .htaccess обрабатываются последовательно. Поэтому пользовательские 301-редиректы обычно следует размещать до стандартного блока Битрикс, который передаёт запрос в urlrewrite.php.

    RewriteEngine On
    
    # Пользовательские редиректы
    
    RewriteRule ^old-page/$ /new-page/ [R=301,L]
    
    # Стандартные правила Битрикс
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
    RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

    Если добавить редирект после универсального правила Битрикс, он может не сработать.

    Редирект со старого URL на новый

    Самая распространённая задача при изменении структуры сайта.

    Например, было:

    /statiya-o-bitrix/

    Стало:

    /blog/statiya-o-bitrix/

    Настраиваем:

    RewriteRule ^statiya-o-bitrix/$ /blog/statiya-o-bitrix/ [R=301,L]

    Если старый URL имеет несколько вариантов написания, можно предусмотреть их отдельно:

    RewriteRule ^statiya-o-bitrix$ /blog/statiya-o-bitrix/ [R=301,L]
    RewriteRule ^statiya-o-bitrix/$ /blog/statiya-o-bitrix/ [R=301,L]

    Редирект всей папки

    Предположим, раньше статьи находились в разделе:

    /articles/

    а теперь:

    /blog/

    Можно перенаправить все страницы:

    RewriteRule ^articles/(.*)$ /blog/$1 [R=301,L]

    Например:

    /articles/bitrix/
    /articles/wordpress/
    /articles/php/

    будут перенаправляться соответственно:

    /blog/bitrix/
    /blog/wordpress/
    /blog/php/

    Редирект старого раздела Битрикс

    Допустим, старый каталог:

    /catalog/stroitelstvo/

    переехал в:

    /catalog/stroitelnye-materialy/

    Используем:

    RewriteRule ^catalog/stroitelstvo/(.*)$ /catalog/stroitelnye-materialy/$1 [R=301,L]

    Таким образом:

    /catalog/stroitelstvo/cement/

    станет:

    /catalog/stroitelnye-materialy/cement/

    Редирект нескольких страниц

    Если страницы менялись точечно, можно составить список:

    RewriteEngine On
    
    RewriteRule ^old-page-1/$ /new-page-1/ [R=301,L]
    RewriteRule ^old-page-2/$ /new-page-2/ [R=301,L]
    RewriteRule ^old-page-3/$ /new-page-3/ [R=301,L]
    RewriteRule ^old-page-4/$ /new-page-4/ [R=301,L]

    Например:

    RewriteRule ^bitrix-install/$ /bitrix/kak-ustanovit-bitrix/ [R=301,L]
    RewriteRule ^bitrix-update/$ /bitrix/obnovlenie-bitrix/ [R=301,L]
    RewriteRule ^bitrix-hosting/$ /bitrix/hosting/ [R=301,L]

    Редирект с HTTP на HTTPS

    После установки SSL-сертификата необходимо сделать перенаправление:

    http://site.ru/

    на:

    https://site.ru/

    Для Apache можно использовать:

    RewriteEngine On
    
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    Важно: если сайт находится за прокси или балансировщиком, обычная проверка %{HTTPS} может вызвать бесконечный редирект. В таком случае необходимо учитывать передаваемый прокси HTTP-заголовок.

    Например:

    RewriteEngine On
    
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    Редирект с www на без www

    Если основным зеркалом является:

    https://site.ru/

    а:

    https://www.site.ru/

    должен перенаправляться на него:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
    RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

    В результате:

    https://www.site.ru/catalog/

    перейдёт на:

    https://site.ru/catalog/

    Редирект с без www на www

    Если основное зеркало сайта —:

    https://www.site.ru/

    используйте:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
    RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]

    Как одновременно настроить HTTPS и www

    Если основное зеркало:

    https://site.ru/

    можно сразу отправлять пользователя на конечный URL:

    RewriteEngine On
    
    RewriteCond %{HTTPS} !=on [OR]
    RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
    RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

    Это позволяет избежать цепочки:

    http://www.site.ru/
    ↓
    https://www.site.ru/
    ↓
    https://site.ru/

    Лучше сделать один переход:

    http://www.site.ru/
    ↓ 301
    https://site.ru/

    Редирект с index.php на главную

    Иногда главная страница доступна по нескольким адресам:

    /
        
    /index.php

    Для редиректа можно использовать:

    RewriteCond %{THE_REQUEST} \s/+index\.php[\s?] [NC]
    RewriteRule ^index\.php$ / [R=301,L]

    В результате:

    https://site.ru/index.php

    перенаправляется на:

    https://site.ru/

    Использование THE_REQUEST позволяет отличить непосредственный запрос пользователя к index.php от внутренней обработки этого файла сервером.

    Редирект с .html на URL без расширения

    Если старый сайт использовал:

    /articles/bitrix.html

    а новый:

    /articles/bitrix/

    можно сделать:

    RewriteRule ^articles/(.*)\.html$ /articles/$1/ [R=301,L]

    Например:

    /articles/bitrix.html

    станет:

    /articles/bitrix/

    Редирект с URL без завершающего слеша

    Допустим, стандартом сайта является:

    /catalog/bitrix/

    а запрос:

    /catalog/bitrix

    должен перенаправляться на вариант со слешем.

    Можно использовать:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !/$
    RewriteRule ^(.+)$ /$1/ [R=301,L]
    Внимание: с универсальными правилами изменения слешей нужно быть осторожным. В Битрикс уже есть собственная логика формирования ЧПУ, поэтому перед внедрением такого правила необходимо проверить существующие настройки URL.

    Редирект с URL со слешем на URL без слеша

    Если сайт использует структуру без завершающего /:

    /catalog/bitrix

    можно использовать:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ /$1 [R=301,L]

    Но подобные универсальные правила желательно применять только после проверки всей структуры сайта.

    Редирект с параметром URL

    Иногда старые страницы используют GET-параметры:

    /catalog.php?id=15

    а новый URL выглядит так:

    /catalog/15/

    В этом случае можно использовать:

    RewriteCond %{QUERY_STRING} ^id=15$
    RewriteRule ^catalog\.php$ /catalog/15/? [R=301,L]

    Как сохранить GET-параметры

    Например, старый URL:

    /old-page/?utm_source=yandex

    должен перейти на:

    /new-page/?utm_source=yandex

    При обычном использовании RewriteRule параметры обычно сохраняются автоматически:

    RewriteRule ^old-page/$ /new-page/ [R=301,L]

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

    Редирект с одного домена на другой

    При переезде сайта:

    old-site.ru

    на:

    new-site.ru

    желательно сохранить соответствие страниц.

    Например:

    old-site.ru/catalog/

    должен переходить на:

    new-site.ru/catalog/

    Для Apache:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} ^old-site\.ru$ [NC]
    RewriteRule ^(.*)$ https://new-site.ru/$1 [R=301,L]

    Если старый сайт доступен также через www:

    RewriteCond %{HTTP_HOST} ^(www\.)?old-site\.ru$ [NC]
    RewriteRule ^(.*)$ https://new-site.ru/$1 [R=301,L]

    При переезде сайта не рекомендуется отправлять все старые URL просто на главную страницу. Для SEO значительно лучше сделать соответствие:

    старый URL → максимально соответствующий новый URL

    А страницы, которым действительно нет аналога, лучше обрабатывать корректным статусом 404 или 410.

    Массовый редирект при изменении структуры каталога

    Допустим, структура была:

    /catalog/section/product/

    а стала:

    /catalog/product/

    Можно использовать:

    RewriteRule ^catalog/[^/]+/(.*)$ /catalog/$1 [R=301,L]

    С подобными регулярными выражениями нужно быть особенно осторожным. Всегда проверяйте несколько реальных URL после добавления правила.

    Редиректы в Nginx для Битрикс

    Если сайт работает на Nginx, лучше выполнять редиректы непосредственно в конфигурации сервера.

    Простейший вариант:

    location = /old-page/ {
        return 301 https://site.ru/new-page/;
    }

    Теперь:

    /old-page/

    перенаправляется на:

    /new-page/

    Несколько редиректов в Nginx

    location = /old-page-1/ {
        return 301 https://site.ru/new-page-1/;
    }
    
    location = /old-page-2/ {
        return 301 https://site.ru/new-page-2/;
    }
    
    location = /old-page-3/ {
        return 301 https://site.ru/new-page-3/;
    }

    Для небольшого количества важных URL это очень удобный способ.

    Массовый редирект в Nginx

    Например, весь раздел:

    /old-section/

    переехал в:

    /new-section/

    Можно использовать:

    location ^~ /old-section/ {
        rewrite ^/old-section/(.*)$ /new-section/$1 permanent;
    }

    Например:

    /old-section/page-1/

    перейдёт на:

    /new-section/page-1/

    Редирект HTTP → HTTPS в Nginx

    Обычно для этого создаётся отдельный серверный блок:

    server {
        listen 80;
        server_name site.ru www.site.ru;
    
        return 301 https://site.ru$request_uri;
    }

    А HTTPS-сайт работает в отдельном server:

    server {
        listen 443 ssl;
        server_name site.ru;
    
        # SSL configuration
    
        ...
    }

    Что делать с urlrewrite.php в Битрикс

    Важно понимать разницу между редиректом и URL rewriting.

    urlrewrite.php используется Битрикс для определения, какой PHP-файл должен обработать ЧПУ-запрос.

    Например:

    /catalog/product/

    может внутренне обрабатываться PHP-файлом компонента, при этом адрес браузера не меняется.

    Редирект работает иначе:

    /old-url/
            ↓
    /new-url/

    Браузер получает HTTP-ответ 301.

    Поэтому не стоит без необходимости добавлять обычные SEO-редиректы в urlrewrite.php.

    Где размещать правила в .htaccess Битрикс

    Перед изменением файла рекомендуется сделать резервную копию:

    cp .htaccess .htaccess.backup

    Затем открыть:

    /.htaccess

    И добавить свои правила до стандартного блока обработки URL Битрикс.

    Например:

    RewriteEngine On
    
    # ==========================================
    # МОИ 301 РЕДИРЕКТЫ
    # ==========================================
    
    RewriteRule ^old-page/$ /new-page/ [R=301,L]
    RewriteRule ^old-section/(.*)$ /new-section/$1 [R=301,L]
    
    # ==========================================
    # BITRIX URL REWRITE
    # ==========================================
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
    RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

    Конкретный стандартный блок .htaccess может отличаться в зависимости от версии Битрикс и конфигурации сервера. Не рекомендуется полностью заменять существующий файл на пример из интернета.

    Как проверить, работает ли редирект

    После внесения изменений не ограничивайтесь проверкой в браузере.

    Проверьте HTTP-заголовки:

    curl -I https://site.ru/old-page/

    Правильный результат должен содержать:

    HTTP/2 301
    location: https://site.ru/new-page/

    После этого можно проверить конечный URL:

    curl -I https://site.ru/new-page/

    Если страница существует, она должна отдавать:

    200 OK

    Как проверить цепочку редиректов

    Важно, чтобы не получилось:

    URL 1
     ↓ 301
    URL 2
     ↓ 301
    URL 3
     ↓ 200

    Лучше:

    URL 1
     ↓ 301
    URL 3
     ↓ 200

    Проверить цепочку можно командой:

    curl -IL https://site.ru/old-page/

    Параметр -L заставляет curl переходить по редиректам.

    Типичные ошибки при настройке редиректов Битрикс

    1. Бесконечный цикл

    Например:

    /page/
     ↓
    /page/

    Или:

    http://site.ru
     ↓
    https://site.ru
     ↓
    http://site.ru

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

    2. Редирект не срабатывает

    Частая причина — правило находится после стандартного правила Битрикс:

    RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

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

    3. Редирект работает не на той странице

    Причина часто в слишком широком регулярном выражении.

    Например:

    RewriteRule ^old/(.*)$ /new/$1 [R=301,L]

    Если в структуре сайта есть несколько разных разделов, начинающихся с /old/, правило может затронуть лишние URL.

    Лучше максимально точно описывать старый URL.

    4. Все страницы отправляются на главную

    Например:

    RewriteRule ^(.*)$ https://site.ru/ [R=301,L]

    Такое правило крайне опасно для SEO. В результате любой URL будет отправляться на главную страницу.

    Если старым страницам нет соответствующего нового URL, не нужно автоматически перенаправлять весь сайт на главную.

    Не используйте 301 там, где нужен 302

    Если перенаправление временное, не стоит использовать:

    [R=301,L]

    Для временного редиректа можно использовать:

    [R=302,L]

    Код 301 означает, что URL переехал окончательно.

    301 или 308?

    Для стандартных SEO-перенаправлений сайта чаще всего достаточно:

    301 Moved Permanently

    Например:

    RewriteRule ^old-page/$ /new-page/ [R=301,L]

    Код 308 также означает постоянное перенаправление, но имеет отличия в поведении HTTP-метода.

    Для обычного переноса страниц Битрикс использование 301 обычно является наиболее понятным и совместимым вариантом.

    Как организовать большое количество редиректов

    Если на сайте десятки или сотни старых URL, не стоит создавать сложную систему из множества универсальных регулярных выражений.

    Удобнее сначала составить таблицу:

    Старый URL Новый URL Код
    /old-page/ /new-page/ 301
    /old-blog/ /blog/ 301
    /catalog/old/ /catalog/new/ 301
    /article.html /article/ 301

    После этого правила можно сгенерировать автоматически.

    RewriteRule ^old-page/$ /new-page/ [R=301,L]
    RewriteRule ^old-blog/$ /blog/ [R=301,L]
    RewriteRule ^catalog/old/$ /catalog/new/ [R=301,L]
    RewriteRule ^article\.html$ /article/ [R=301,L]

    Для крупного сайта такой подход значительно удобнее ручного редактирования.

    Редиректы и SEO

    При изменении URL важно выполнить несколько действий:

    1. Настроить 301 со старого URL на новый.
    2. Проверить, что новый URL отдаёт 200 OK.
    3. Обновить внутренние ссылки сайта.
    4. Обновить sitemap.xml.
    5. Проверить canonical.
    6. Проверить хлебные крошки.
    7. Проверить ссылки в меню и компонентах Битрикс.
    8. Проверить внешние рекламные ссылки.
    9. Проверить цепочки редиректов.
    10. Проверить отчёты об ошибках 404.

    Главная задача — не просто сделать редирект, а обеспечить правильную миграцию URL.

    Что выбрать: .htaccess, Nginx или Битрикс?

    .htaccess

    Подходит, если:

    • сервер работает на Apache;
    • нужно быстро добавить несколько правил;
    • нет доступа к конфигурации сервера;
    • используется стандартный виртуальный хостинг.

    Nginx

    Предпочтителен, если:

    • сайт работает непосредственно на Nginx;
    • есть доступ к конфигурации сервера;
    • редиректов много;
    • требуется максимально ранняя обработка запроса.

    urlrewrite.php и routing

    Используйте механизм маршрутизации Битрикс, когда требуется связать URL с компонентом, контроллером или PHP-обработчиком.

    Для обычного постоянного SEO-редиректа чаще правильнее использовать уровень веб-сервера.

    Готовый пример .htaccess для сайта на Битрикс

    RewriteEngine On
    
    # ==========================================
    # 301 REDIRECTS
    # ==========================================
    
    # Старые страницы
    RewriteRule ^old-page/$ /new-page/ [R=301,L]
    RewriteRule ^old-page-2/$ /new-page-2/ [R=301,L]
    
    # Перенос раздела
    RewriteRule ^old-section/(.*)$ /new-section/$1 [R=301,L]
    
    # index.php → главная
    RewriteCond %{THE_REQUEST} \s/+index\.php[\s?] [NC]
    RewriteRule ^index\.php$ / [R=301,L]
    
    # ==========================================
    # BITRIX URL REWRITE
    # ==========================================
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
    RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]

    Заключение

    Для большинства сайтов на 1С-Битрикс схема достаточно простая:

    Старый URL
        ↓
    301 Redirect
        ↓
    Новый URL
        ↓
    200 OK

    Основные правила:

    # Одна страница
    RewriteRule ^old-page/$ /new-page/ [R=301,L]
    
    # Целый раздел
    RewriteRule ^old-section/(.*)$ /new-section/$1 [R=301,L]
    
    # index.php
    RewriteCond %{THE_REQUEST} \s/+index\.php[\s?] [NC]
    RewriteRule ^index\.php$ / [R=301,L]
    
    # HTTP → HTTPS
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    Самое важное — не добавлять универсальные правила, не понимая, какие URL они затронут. Перед изменением .htaccess обязательно сделайте резервную копию и протестируйте редиректы через curl.

    Если сайт работает на Nginx, редиректы лучше реализовывать в конфигурации Nginx, а не пытаться переносить Apache-синтаксис .htaccess в Nginx.

    Нужна помощь с Битрикс?

    Исправим ошибку, доработаем сайт, ускорим Битрикс или поможем разобраться с проблемой.

    Услуги
    База знаний