HTTP-редиректы в Nginx

Полное руководство по настройке переадресаций в Nginx

HTTP-редиректы — важный инструмент для управления веб-ресурсами. Они применяются для объединения зеркал сайта, перевода пользователей с HTTP на HTTPS, реорганизации структуры страниц или при смене домена. Грамотно настроенные редиректы улучшают пользовательский опыт и помогают сохранить позиции сайта в поисковых системах. В этой статье разберём, как реализовать различные типы перенаправлений в Nginx с использованием стандартных директив.

Примечание

HTTP-редирект — это механизм переадресации запроса с одного домена или URL на другой. Он используется всякий раз, когда необходимо направить пользователей на новый адрес. Применений может быть множество: от исправления ошибок в URL до обеспечения работы сайта по защищённому протоколу HTTPS.

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


Редиректы настраиваются в конфигурационных файлах Nginx. Основные файлы:

  • /etc/nginx/nginx.conf — главный файл конфигурации;
  • /etc/nginx/sites-available/имя_сайта — конфигурация конкретного сайта;
  • /etc/nginx/sites-enabled/ — символическая ссылка на активный файл из sites-available.

Примечание

Рекомендуется вносить изменения в файлы в каталоге sites-available, а затем проверять корректность синтаксиса командой:

nginx -t

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

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

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

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

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

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

301 редирект с HTTPS на HTTP

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

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

301 редирект с HTTP на HTTPS

Для нового домена:

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

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

Для существующего домена:

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

Смена 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;
}

Удаление слэша в конце URL

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

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

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

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

Редиректы со страниц с двойными слэшами (//)

merge_slashes off;

location ~* "//" {
    rewrite ^(.*)//(.*)$ $1/$2;
    rewrite ^ $uri permanent;
}

Важно

После внесения изменений не забудьте перезапустить сервер:

service nginx restart

Примечание

Использование VPS или выделенного сервера даёт полный контроль над конфигурацией Nginx. Это позволяет гибко управлять редиректами, тестировать разные варианты и быстро устранять возможные ошибки.

Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам