Решение, как сделать большинство редиректов в 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)