Nginx, 301 редирект с http на https протокол
Если у вас на сайте есть SSL сертификат для домена, то вы можете настроить https протокол. После чего для 301-го редиректа вам необходимо добавить следующий код в файл конфигурации nginx для домена:
server { #... if ($scheme = http) { return 301 https://$server_name$request_uri; } }
или
server { #... listen server_ip:80; server_name www.devreadwrite.com; rewrite ^ https://www.devreadwrite.com$request_uri? permanent; }
Nginx, 301 редирект с https на http протокол
Обратный пример конфигурации для редиректа с http на https:
server { listen 443; server_name www.devreadwrite.com; rewrite ^ http://www.devreadwrite.com$request_uri? permanent; } server { listen 80; server_name www.devreadwrite.com; #... }
Nginx, 301 редирект с www на без www
Пример 301-го редиректа на основное зеркало без www:
server { #... if ($host ~* www\.(.*)) { set $host_without_www $1; rewrite ^(.*)$ http://$host_without_www$1 permanent; } }
или
server { #... server_name www.devreadwrite.com; rewrite ^/(.*)$ http://devreadwrite.com/$1 permanent; }
Nginx, 301 редирект с без www на с www
Обратный пример 301-го редиректа на основное зеркало сайта с www:
server { #... server_name devreadwrite.com; rewrite ^/(.*)$ http://www.devreadvrite.com/$1 permanent; } server { listen 80; server_name www.devreadvrite.com; #... }
Nginx, 301 редирект для одной страницы
Если у страницы поменялся URL, то лучше сделать 301 редирект на новый URL:
server { #... if ( $request_filename ~ oldpage/ ) { rewrite ^ http://www.devreadvrite.com/newpage/? permanent; } #... }
Nginx, 301 редирект для папки
Аналогичный пример 301-го редиректа для папки:
server { #... if ( $request_filename ~ oldfolder/.+ ) { rewrite ^(.*) http://www.devreadvrite.com/newfolder/$1 permanent; } #... }
Nginx, 301 редирект с одного домена на другой
Если вы сменили домен сайт и хотите перенести вес старого домена на новый, то можно сделать 301-й редирект со старого домена на новый:
server { server_name domain.com www.devreadvrite.com; rewrite ^ $scheme://www.new-devreadvrite.com; }
Nginx, 301 редирект с каждой страницы одного домена на такой же URL адрес другого домена
Если вы планируете изменить свой домен или изменить название предприятия, то перенаправление домена является единственным лучшим решением для сохранения пользователей и перевода их запросов на новый домен.
server { server_name devreadvrite.com www.devreadvrite.com; rewrite ^ $scheme://www.new-devreadvrite.com$request_uri permanent; }
Nginx, 301 редирект со страниц со слешем на страницы без слеша в конце URL
Часто бывает так что одна и та же страница доступна по двум URL, например /may-best-page и /my-best-page/, если человеку понятно что это одна и та же страница, то поисковые системы понимают это как две разные страницы, соответственно разбивают вес страницы, а также показываются в аналитике (статистике) как 2 разные страницы. Для того, что бы избежать этого вы можете сделать 301 редирект со страниц со слешем в конце URL на без него:
server { #... rewrite ^/(.*)/$ /$1 permanent; #... }
Nginx, 301 редирект со страниц без слеша на страницы со слешем в конце URL
Причина делать такой редирект та же, что и в ситуации описанным выше, за исключением того, что редирект необходимо делать со страницы без слеша в конце URL на страницу со слешем в конце URL:
server { #... rewrite ^(.*[^/])$ $1/ permanent; #... }
Дополнительно
Не забудьте перед использованием примеров сменить devreadwrite.com на свой домен. После внесения изменений в файл конфигурации nginx для домена необходимо перезапустить nginx:
service nginx reload
или
service nginx restart
Если у вас Apache, то примеры 301-го редиректа можно почитать здесь: 301 редирект на все случаи жизни с помощью .htaccess.
Комментарии
Проблема только в том, как исключить файл robots.txt из редиректа на HTTPS - это нужно для Яндекса.
ОтветитьТ.е. как написать команду, чтобы 301 редиректа НЕ было для http://site.ru/robots.txt ?
В инете никто не может посоветовать.
Может как-то так:
Ответитьserver {
#...
if ( $request_filename != robots.txt ) {
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
}
#...
}
На самом деле удалось получить следующее:
Ответитьif ($request_uri !~* /robots.txt) {
return 301 https://site.ru$request_uri;
}
Т.е. редиректить всё, кроме robots.txt
Перепробовал много разных вариантов, этот единственный который сработал. :)
ОтветитьА есть решение для перенаправления с любой страницы на главную?
ОтветитьЕсли делать редирект rewrite ^(.*[^/])$ $1/ permanent; то он делает и на файлы то есть у вас все подключенные файлы слетят. Как это обойти не могу найти ответа.
ОтветитьПодскажите пожалуйста перенес сайт на другое CMS. И url-ы стали совершенно разные, как можно реализовать такой редирект? К примеру страница рубрики "Животные" лежит по адресу https://example.com/animal.html а надо сделать редирект на https://new-site/?page_id=905.
ОтветитьЗдравствуйте! Подскажите пожалуйста, какие нужно внести правки в файл nginx.conf, если у меня на сайте вместо 301 срабатывает 307 редирект?
ОтветитьРанее сайт лежал на шаред хостинге и такой проблемы не было - срабатывал 301.
Заранее спасибо за помощь.