Решение, как сделать большинство редиректов в NGINX на примере конфигурации веб-окружения BitrixVM
Решение:
Примеры популярных редиректов в NGINX для 1С-Битрикс на основе конфигурации веб-окружения BitrixVM (VMBitrix)
- Правила прописываем в файле конфигурации nginx конкретного хоста на BitrixVM:
- Если сайт работает без SSL → /etc/nginx/bx/site_avaliable/bx_ext_domain.conf
- Если сайт работает по SSL → /etc/nginx/bx/site_avaliable/bx_ext_ssl_domain.conf
- После изменения файла не забываем перезагрузить nginx командой: systemctl restart nginx
Редирект на HTTPS (вариант 1)
- Проверить наличие кода в /etc/nginx/bx/site_enabled/s1.conf
# Redirect to ssl if need if (-f /home/bitrix/www/.htsecure) { rewrite ^(.*)$ https://$host$1 permanent; }
- Создать в корне сайта .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) — Флаг останавливает процесс преобразования, текущая ссылка считается окончательной.
Похожие решения:
Комментарии (0)