Представьте, что вам нужно изменить адрес сайта. Например, вы выбрали домен покороче или сделали ребрендинг, поэтому прежнее имя неактуально. Проблема в том, что люди будут продолжать заходить на старый сайт: по привычке или по размещённым ранее ссылкам.
Чтобы люди всё же попадали на нужную страничку, нужно настроить автоматическую переадресацию пользователя с одного URL-адреса на другой. Проще всего выполнить редирект Nginx на VPS.
У перенаправлений могут быть разные HTTP-статусы в зависимости от ситуации, целей, задач. По их кодам браузеры и поисковики распознают вид редиректа.
Настраивать с помощью Nginx 301 редирект нужно в том случае, если сайт навсегда переходит на другой домен и уже не вернётся на старый. В этом случае браузер совершает новый запрос, чтобы перевести пользователя на нужную страницу.
Если всё сделать правильно, никаких задержек и сложностей не будет, человек даже не заметит, что находится на другом веб-адресе. В случае ошибок выскочит ошибка 404.
Он используется, когда нужно выполнить переадресацию на временную страницу. Например, в интернет-магазине закончился товар, а пользователю показывают другой с аналогичными характеристиками.
Важно отметить, что поисковики в этом случае старую страницу-донора исключают из выдачи, поскольку роботы видят полное дублирование.
Редирект nginx с кодом 303 или 307 настраивается, когда нужно направить пользователя на страницу, которая частично заменяет запрошенную, но не имеет точного ответа. Это тоже решение для временной переадресации, при которой сохраняются параметры страницы-донора.
Чтобы выполнить переадресацию, нужно внести изменения в конфигурационный файл nginx.conf в каждом хосте. Если есть виртуальные хосты, аналогичные действия придётся выполнить для всех.
Вставить редирект нужно в секцию server.
Теперь рассмотрим примеры для нескольких ситуаций.
Nginx редирект на https актуален, когда подключен SSL-сертификат.
server {
#...
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
#...
}
server {
#...
server_name yourdomain.ru www.yourdomain.ru;
return 301 http://$server_name$request_uri;
#...
}
server {
#...
if ($host ~* www\.(.*)) {
set $host_without_www $1;
rewrite ^(.*)$ http://$host_without_www$1 permanent;
}
#...
}
server {
#...
if ($host ~* ^[^.]+\.[^.]+$) {
rewrite ^(.*)$ $scheme://www.$host$1 permanent;
}
#...
}
server {
#...
if ( $request_filename ~ oldpage.html/ ) {
rewrite ^ newpage.html permanent;}
#...
}
Замените oldpage.html и newpage.html на актуальные адреса страничек.
server {
#...
if ( $request_filename ~ oldfolder/.+ ) {
rewrite ^(.*) newfolder/$1 permanent; }
#...
}
Замените oldfolder и newfolder на актуальные названия папок
server {
#...
rewrite ^ $scheme://www.domain.ru;
#...
}
Замените www.domain.ru на актуальный домен, куда ведёт редирект.
server {
#...
rewrite ^/(.*)/$ /$1 permanent;
#...
}
server {
#...
rewrite ^(.*[^/])$ $1/ permanent;
#...
}
После изменения в conf перезапустите nginx с помощью команды
service nginx restart
чтобы проверить конфигурацию, выполните проверку.
nginx -t