Нужна помощь с редиректом Есть решение
Есть SSL сертификат. Всё настроено и работает на https.
Главное зеркало https://мой-домен.ru
В файле .htaccess стоит редирект с http на https.
С адреса http://www.мой-домен.ru редирект делает фреймворк Webasyst.
Не получается настроить редирект с https.www//мой-домен.ru на https://мой-домен.ru
Попробовал много вариантов записем в .htaccess , но ничего. Может кто-то уже с этим сталкивался?
12 ответов
Вариант 1:
Вариант 2:
попробуйте.
Оказалось тоже что-то не правильно. С https://www.мойдомен.ru перенаправляет на http://www.мой-домен.ru, а должно на https://мойдомен.ru и код отдаёт 302, а не 301
Выложите что у вас в .htaccess корневом содержится.
Вот мой .htaccess:
RewriteEngine on
RewriteCond %{HTTP:HTTPS} !=on [NC]
RewriteCond %{REQUEST_URI} !robots.txt
RewriteRule ^(.*)$ https://домен.ru/$1 [R=301,L]
<FilesMatch "\.md5$">
Deny from all
</FilesMatch>
DirectoryIndex index.php
Options -Indexes
# Comment the following line, if option Multiviews not allowed here
Options -MultiViews
AddDefaultCharset utf-8
<ifModule mod_rewrite.c>
RewriteEngine On
# Uncomment the following line, if you are having trouble
#RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|jpg|jpeg|gif|png)$ [or]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,QSA]
</ifModule>
<ifModule mod_headers.c>
<FilesMatch "\.(jpg|jpeg|png|gif|js|css)$">
Header set Cache-Control "max-age=3153600, public"
</FilesMatch>
</ifModule>
order allow,deny
allow from all
deny from 92.248.252.160
deny from 146.185.223
deny from 188.186.60
php_value memory_limit 128M
В нем нет правила для редиректа c_www -> без_www
Понял. Пробовал ставить и ничего не меняется и webasyst где-то писал, что фреймворк сам делает редирект на без www
В обоих вариантах идёт редирект с https://www на http://www, а надо просто на https://
Как-то так
если не поможет - тогда нужно смотреть по месту уже.
Спасибо. Попробовал. Вроде всё работает. Поддержка хостинга точно такую же схему предлагает. Единственное мне не понятно почему при проверке на Яндексе выдаёт код 302? Это же временное перенаправление и сначала на адрес http://www, а с него видимо на https.
Server: nginx/1.9.12
Содержимое страницы отсутствует
Спасибо большое. Попробовал первый вариант. Заменил мой код на этот. Получилось так:
С http://www.мой-домен.ru редирект идёт на https://мой-домен.ru
С https.www//мой-домен.ru на https://мой-домен.ru
но не работает с http://мой-домен.ru на https://мой-домен.ru
Я тогда оставил свой код и добавил ваш первый и всё получилось, только на https.www//мой-домен.ru браузер пишет про недостоверный сертификат и сам не хочет переходить (может для htps://www нужен отдельный сертификат?) Если нажать "Всё равно перейти", то переадресация дальше идёт нормально. Думаю, что роботы поисковиков будут тупить и не переходить с htps://www
Код получился такой:
RewriteCond %{HTTP:HTTPS} !=on [NC]
RewriteCond %{REQUEST_URI} !robots.txt
RewriteCond %{HTTP_HOST} ^www\.мой-сайт\.ru [NC]
RewriteRule ^(.*)$ https://мой-сайт.ru/$1 [R=301,L]
Добился ответа от хостинг провайдера, вот:
Ответ 302 в данном случае связан с работой web-сервера nginx, поскольку при обращении к https://www.домен.ru/ будет выведена ошибка о незащищенном соединении:
Примеры:
$ curl -I https://goshwood.ru/
curl: (60) server certificate verification failed.
данная ошибка выводится по причине отсутствия сертификата для домена с www., в случае игнорирования предупреждения, web-сервером отправляется ответ на перенаправление с http:
$ curl -Ik https://www.goshwood.ru/
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.9.12
Date: Mon, 09 Oct 2017 12:49:03 GMT
Content-Type: text/html
Content-Length: 161
Connection: keep-alive
Keep-Alive: timeout=10
Location: http://www.goshwood.ru/
Подобное перенаправление было указано специально, чтобы поисковыми роботами не индексировались страницы по https по незащищенному соединению(то есть при отсутствии SSL-сертификата для домена).
В данном случае для большинства поисковых роботов будет достаточно директивы Host в файле robots.txt и при следующем обращении данная директива будет учитываться.
Методом проб и ошибок выяснил, что для перехода на https достаточно в .htaccess сделать запись:
RewriteCond %{HTTP:HTTPS} !=on [NC]
RewriteCond %{REQUEST_URI} !robots.txt
RewriteRule ^(.*)$ https://домен.ru/$1 [R=301,L]
На www фреймворк Webasyst делает сам редирект.
Сегодня докопался до истинной причины почему https://www.домен.ru отдавал код 302. Оказывается хостинг-провайдер неправильно настроил ssl-сертификат. Они это исправили и теперь всё нормально, код 301.