@foxse

Nginx редирект с любого набора сайта на https://www.site.ru с кодами 200, 301?

Здравствуйте
Известна ли кому конфигурация для nginx для перенаправления с любого набора сайта на https://www.site.ru с кодами 200, 301?
Например, набирая www.site.ru, site.ru, https://site.ru, www.site.ru, site.ru переход будет на https://www.
Я пробовал разные с Хабра, stackoverflow.com, https://wiki.nginx.org и др.
Иногда выдает 307. Цепочка такая 307 => 301 => 200 или 307 => 200.

Важно для SEO? Возможно ошибаюсь.

Отличный результат с кодами и редиректом avito.ru. Тоже на nginx.
  • Вопрос задан
  • 2622 просмотра
Пригласить эксперта
Ответы на вопрос 2
@xbox
С кодом 200 - это не редирект.
Редирект обычно с кодом 301, 302.

При "перманентном" редиректе сначала у Вас страница отдает код 301 и указывает новый адрес. А потом уже новая страница открывается и, если все нормально, то отдает код 200.

Вот пример, как http://site.ru/что_угодно и http://www.site.ru/что_угодно перенаправить с кодом 301 на https://www.site.ru/что_угодно
Для https://site.ru делается аналогично. (Прописывается конфиг в отдельном блоке "server".)

server {
		listen 100.100.100.100:80;					
		server_name site.ru www.site.ru;

		location / {		
			rewrite ^(.*)$ https://www.site.ru$1 permanent;
		}	
	}


Если Вам не нужно сохранять путь после домена при редиректе, то можно воспользоваться еще более короткой конструкцией
location / {
			return 301  https://www.site.ru;
			}


Я не понимаю, зачем Вам 307 редирект. И тем более не понимаю, зачем делать двойной редирект 307=>301=> итп. В этом нет никакого смысла, в том числе SEO. И если кто-то так сделал, в том числе и крупный ресурс, то это не означает, что нужно это копировать. Двойной редирект только увеличивает время отклика страницы.
В целях SEO используется 301 редирект. Поисковики отлично с ним работают и "склеивают" адреса.

Ниже описание 307 редиректа из википедии. Для Вашего примера такой редирект разве нужен?
307 Temporary Redirect — запрашиваемый ресурс на короткое время доступен по другому URI, указанный в поле Location заголовка. Метод запроса (GET/POST) менять не разрешается. Например, POST запрос должен быть отправлен по новому URI тем же методом POST. Этот код был введён вместе с 303 вместо 302-го для избежания неоднозначности. Введено в RFC 2616 (обновление HTTP/1.1).


Вы пишите:
Браузер запоминает, что используется https:// и в случае захода на сайте по незащищенному соединению, он осуществляет внутренний переход с кодом 307 на https://.

На самом деле браузер запоминает не это. Некоторые браузеры запоминают 301 редирект. Это означает, что если страница "A" ссылается на страницу "B" через 301 редирект, то при повторном наборе в браузере адреса "A", браузер сразу грузит адрес "B" без предварительного обращения к "A". То, что в Вашем примере "A" и "B" имеют один и тот же разный адрес, который отличается только протоколом http/https, - это лишь частный случай. Браузеры могли бы точно также запомнить редирект _http//site1.eu/page1 на _https//site2.biz/page2
Ответ написан
@foxse Автор вопроса
"С кодом 200 - это не редирект." Это понятно.

Проблема была с кодом 307. Цепочка такая 307 => 301 => 200 или 307 => 200. В браузере FireFox код 307 не наблюдается.
Оказывается, связано с использованием SSL сертификата и заголовка Strict-Transport-Security
server {
...
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
...

Браузер запоминает, что используется https:// и в случае захода на сайте по незащищенному соединению, он осуществляет внутренний переход с кодом 307 на https://.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы