HTTP-перенаправление (или URL редирект) — Это переадресация одного домена или адреса на другой. Существует множество вариантов применения перенаправления.

Редирект используется всякий раз, когда сайту необходимо, чтобы пользователи, создающие запросы, были направлены на другой адрес. Существует множество ситуаций, в которых редирект крайне необходим.

Для перенаправления трафика Nginx использует несколько инструментов.

Nginx

Модуль ngx_http_rewrite_module, необходимый для настройки перенаправлений, он устанавливается автоматически вместе с Nginx.

Редирект 301 с www.domain.ru на domain.ru

Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для домена с www, вторая для домена без www:
Секция server для редиректа:

server {  
     listen  80;
     server_name  www.domain.ru;
     rewrite ^ http://domain.ru$request_uri? permanent; 
}

Секция server, где находятся основные настройки домена:

server {  
     listen  80;
     server_name domain.ru;
.....
}

После внесения изменений в конфигурационный файл Nginx, нужно перезапустить веб сервер.

service nginx restart  

Редирект 301 с domain.ru на www.domain.ru

Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для домена без www, вторая для домена с www.

Секция server для редиректа:

server {  
     listen  80;
     server_name  domain.ru;
     rewrite ^ http://www.domain.ru$request_uri? permanent; 
}

Секция server, где находятся основные настройки домена.

server {  
     listen  80;
     server_name www.domain.ru;
.....
}

После внесения изменений в конфигурационный файл Nginx, нужно перезапустить веб сервер.

service nginx restart  

Редирект 301 с https на http

Для Nginx вам нужно создать две секции server в конфигурационный файл, одна для https(443 порт), вторая для http(80 порт).

Секция server для открытия по https(443 порт) и настройки редиректа:

server {  
   listen  443;
   server_name  www.domain.ru;
   rewrite ^ http://www.domain.ru$request_uri? permanent; 
}

Секция server, для открытия по http(80 порт), где находятся основные настройки домена.

server {  
   listen  80;
   server_name www.domain.ru;
.....
}

После внесения изменений в конфигурационный файл Nginx, нужно перезапустить веб сервер.

service nginx restart  

Редирект 301 с http на https

Для Nginx нужно создать две секции server в конфигурационный файл, одна для http(80 порт), вторая для https(443 порт).

Для нового домена в конфигурациоонм файле nginx
Секция server, для открытия по http(80 порт) и настройки перенаправления:

server {  
    listen  IP сервера:80;
    server_name  www.domain.ru;
    rewrite ^ https://www.domain.ru$request_uri? permanent; 
}

Секция server, для открытия по https(443 порт), где находятся основные настройки домена.

server {  
    listen  IP сервера:443;
    server_name www.domain.ru;
.....
}

Для существующего домена в конф. файле nginx

Если вы вносите изменения в существующую секцию конф. файла nginx делайте это так: Из основной секции домена удалите строку вида

     listen  IP сервера:80;

И создайте новую секцию server такого вида:

server {  
    listen  IP сервера:80;
    server_name  www.domain.ru;
    rewrite ^ https://www.domain.ru$request_uri? permanent; 
}

После внесения изменений в конфигурационный файл Nginx, его нужно перезапустить:

service nginx restart  

Если у вас на сайте есть SSL сертификат для домена, то вы можете настроить https протокол. После чего для 301-го редиректа вам необходимо добавить следующий код в файл конфигурации nginx для домена:

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

или

server {  
    #...
    listen  server_ip:80;
    server_name  www.domain.ru;
    rewrite ^ https://www.domain.ru$request_uri? permanent;
}

Если у страницы поменялся URL, то лучше сделать 301 редирект на новый URL:

server {  
    #...
    if ( $request_filename ~ oldpage/ ) {
        rewrite ^ http://www.domain.ru/newpage/? permanent;
    }
    #...
}

301 редирект для папки

server {  
    #...
    if ( $request_filename ~ oldfolder/.+ ) {
        rewrite ^(.*) http://www.domain.ru/newfolder/$1 permanent;
    }
    #...
}

301 редирект с одного домена на другой

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

301 редирект со страниц со слешем на страницы без слеша в конце URL

server {  
    #...
    rewrite ^/(.*)/$ /$1 permanent;
    #...
}

Убрать / на конце страницы

location ~ .+/$ {  
rewrite (.+)/$ $1 permanent;  
}

Редиректы со страниц с index.php

if ($request_uri ~* "^(.*/)index\.php$") {  
        return 301 $1;
    }

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

merge_slashes off;  
# replace merge_slashes' behavior with "redirect_slashes"
location ~* "//" {  
    rewrite ^(.*)//(.*)$ $1/$2;
    rewrite ^ $uri permanent;
}

После внесения изменений в конфигурационный файл Nginx, нужно перезапустить веб сервер.

service nginx restart  
Обновлено 25 февраля 2019 г.