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