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. Это позволяет гибко управлять редиректами, тестировать разные варианты и быстро устранять возможные ошибки.