Редіректи NGINX для Бітрікс (BitrixVM, VMBitrix)
Рішення, як зробити більшість редиректів в 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) - Прапор зупиняє процес перетворення, поточна посилання вважається остаточною.