Редиректы NGINX для Битрикс (BitrixVM, VMBitrix)

Решение, как сделать большинство редиректов в NGINX на примере конфигурации веб-окружения BitrixVM

Решение:
Примеры популярных редиректов в NGINX для 1С-Битрикс на основе конфигурации веб-окружения BitrixVM (VMBitrix)
  1. Правила прописываем в файле конфигурации nginx конкретного хоста на BitrixVM:
    • Если сайт работает без SSL → /etc/nginx/bx/site_avaliable/bx_ext_domain.conf
    • Если сайт работает по SSL → /etc/nginx/bx/site_avaliable/bx_ext_ssl_domain.conf
  2. После изменения файла не забываем перезагрузить nginx командой: systemctl restart nginx


Редирект на HTTPS (вариант 1)

  1. Проверить наличие кода в /etc/nginx/bx/site_enabled/s1.conf
    # Redirect to ssl if need
    if (-f /home/bitrix/www/.htsecure) { rewrite ^(.*)$ https://$host$1 permanent; }
  2. Создать в корне сайта .htsecure


Редирект на HTTPS (вариант 2)

if ($scheme = http) {
        return 301 https://$server_name$request_uri;
}


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

if ($host ~* www\.(.*)) {
        set $host_without_www $1;
        rewrite ^(.*)$ http://$host_without_www$1 permanent;
}


Добавляем слеши в конце

if (!-f $request_filename) {
     rewrite [^/]$ $uri/ permanent;
}


Убираем слеш в конце

if (!-f $request_filename) {
     rewrite ^/(.*)/$ /$1 permanent;
}


Убираем index.php в конце адреса

if ($request_uri ~ "^(.*)index\.(?:php|html)") {
 return 301 $1;
}
Если для определенных разделов данный редирект нужно отключить, то в маску добавляем разделы исключения:
if ($request_uri ~ "^(/(?!personal|catalog).*)index\.(?:php|html)") {
 return 301 $1;
}
Чтобы сохранить параметры в адресной строке, нужно задать:
if ($request_uri ~ "^(.*)index\.(?:php|html)") {
      return 301 $1$is_args$args; break; # break нужен в том случае,
					#если происходит склейка нескольких редиректов одновременно
}


Редирект страницы

rewrite /catalog/section_1/section_1_1/ /catalog/section_1_1/ permanent;


Редирект файла

location = /robots.txt {
    rewrite ^/robots.txt$ /robots2.txt;
}


Удалить из адреса часть строки (вариант 1)

rewrite /deleted-url/(.*) /$1 permanent;


Удалить из адреса часть строки (вариант 2)

if ($request_uri ~ "/deleted-url/(.*)") {
        return 301 $1;
}


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

server {
    server_name domain.com www.domain.com;
    rewrite ^ $scheme://www.new-domain.com;
}


Редирект с каждой страницы домена на такой же URL другого домена

server {
    server_name domain.com www.domain.com;
    rewrite ^ $scheme://www.new-domain.com$request_uri permanent;
}


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

server {
        ...
        server_name  domain domain.*;
        return 301 https://$host$request_uri;
}


Пояснения:

  • Условие RewriteCond обозначает совпадение с которым будет выполнено правило RewriteRule. При этом, используются символы:
  • . – Точка — это любой символ (но только один!).
  • ^ — Эта метка означает начала строки.
  • $ — Эта метка означает конец строки.
  • \ — Эта экранирующий слэш, позволяет считать следующий за ним символ, обычным символом.
  • () – Этот символ обозначает группировку.
  • ! – Метка отрицания.
  • + — Этот символ повторяется от 1 до 65536 раз.
  • ? — Этот символ повторяется 0 или 1 раз.
  • * — А этот символ повторяется от 0 до 65536 раз.
  • Флаги определяют дополнительные опции.
  • R — (redirect) — По умолчанию останавливает процесс преобразования, возвращает результат в браузер клиента, как редирект на данную страницу 302, MOVED TEMPORARY. Например флагу можно указать другой код результата, R=301 и он возвратит редирект клиенту с кодом 301 MOVED PERMANENTLY.
  • NC — (nocase) — Этот флаг отключает проверку регистра символов.
  • L — (last) — Флаг останавливает процесс преобразования, текущая ссылка считается окончательной.

Похожие решения:
Создано: 06.05.2020
Просмотров: 623

Написать комментарий (без авторизации) 1

1) Чтобы изменения вступили в силу — не забываем сделать рестарт nginx: systemctl restart nginx
2) Проверяя редиректы в браузере, сбрасываем кеш Ctrl+F5
Ответить
Написать