Настройка редиректа в Apache и Nginx
Руководство по настройке перенаправлений с помощью конфигурационных файлов Apache и Nginx
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\.phpquot;) {
return 301 $1;
}
Редиректы со страниц //
merge_slashes off;
replace merge_slashes' behavior with "redirect_slashes"
location ~* "//" {
rewrite ^(.*)//(.*)$ $1/$2;
rewrite ^ $uri permanent;
}
После внесения изменений в конфигурационный файл Nginx, нужно перезапустить веб сервер.
service nginx restart