Настройка редиректа с помощью Nginx на VPS

Представьте, что вам нужно изменить адрес сайта. Например, вы выбрали домен покороче или сделали ребрендинг, поэтому прежнее имя неактуально. Проблема в том, что люди будут продолжать заходить на старый сайт: по привычке или по размещённым ранее ссылкам.

Чтобы люди всё же попадали на нужную страничку, нужно настроить автоматическую переадресацию пользователя с одного URL-адреса на другой. Проще всего выполнить редирект Nginx на VPS.

Виды переадресаций

У перенаправлений могут быть разные HTTP-статусы в зависимости от ситуации, целей, задач. По их кодам браузеры и поисковики распознают вид редиректа.

Редирект 301

Настраивать с помощью Nginx 301 редирект нужно в том случае, если сайт навсегда переходит на другой домен и уже не вернётся на старый. В этом случае браузер совершает новый запрос, чтобы перевести пользователя на нужную страницу.

Если всё сделать правильно, никаких задержек и сложностей не будет, человек даже не заметит, что находится на другом веб-адресе. В случае ошибок выскочит ошибка 404.

Редирект 302

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

Важно отметить, что поисковики в этом случае старую страницу-донора исключают из выдачи, поскольку роботы видят полное дублирование.

Редиректы 303 и 307

Редирект nginx с кодом 303 или 307 настраивается, когда нужно направить пользователя на страницу, которая частично заменяет запрошенную, но не имеет точного ответа. Это тоже решение для временной переадресации, при которой сохраняются параметры страницы-донора.

Команды для настройки редиректа

Чтобы выполнить переадресацию, нужно внести изменения в конфигурационный файл nginx.conf в каждом хосте. Если есть виртуальные хосты, аналогичные действия придётся выполнить для всех.

Вставить редирект нужно в секцию server.

Теперь рассмотрим примеры для нескольких ситуаций.

С http на https

Nginx редирект на https актуален, когда подключен SSL-сертификат. 

server {

   #...

if ($scheme = http) {

return 301 https://$server_name$request_uri;

}

   #...

}

С https на http

server {

   #...

  server_name  yourdomain.ru www.yourdomain.ru;

return 301 http://$server_name$request_uri;

   #...

}

С www на сайт без www

server {

   #...

if ($host ~* www\.(.*)) {

set $host_without_www $1;

rewrite ^(.*)$ http://$host_without_www$1 permanent;

}

   #...

}

С сайта без www на www

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 на актуальный домен, куда ведёт редирект.

На страницу без слеша в конце URL

server {

   #...

   rewrite ^/(.*)/$ /$1 permanent;

   #...

}

На страницу со слешем в конце URL

server {

   #...

  rewrite ^(.*[^/])$ $1/ permanent;

   #...

}

После изменения в conf перезапустите nginx с помощью команды 

service nginx restart

чтобы проверить конфигурацию, выполните проверку.

nginx -t

Всё ещё остались вопросы?