Нужна помощь с редиректом Есть решение

Есть SSL сертификат. Всё настроено и работает на https.

Главное зеркало https://мой-домен.ru

В файле .htaccess стоит редирект с http на https.

С адреса http://www.мой-домен.ru редирект делает фреймворк Webasyst.

Не получается настроить редирект с https.www//мой-домен.ru на https://мой-домен.ru

Попробовал много вариантов записем в .htaccess , но ничего. Может кто-то уже с этим сталкивался?

4 ответа

  • 1
    Antonio 9 октября 2017 19:26 # Решение

    Добился ответа от хостинг провайдера, вот:

    Ответ 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 делает сам редирект.

  • 1
    Antonio 11 октября 2017 01:41 # Решение

    Сегодня докопался до истинной причины почему https://www.домен.ru отдавал код 302. Оказывается хостинг-провайдер неправильно настроил ssl-сертификат. Они это исправили и теперь всё нормально, код 301.

  • 1

    Вариант 1:

    RewriteCond %{HTTP_HOST} ^www\.мой\.домен\.com [NC] 
    RewriteRule ^(.*)$ https://мой.домен.com/$1 [R=301,L] 

    Вариант 2:

    RewriteCond %{HTTP_HOST} !^мой\.домен\.org [NC]
    RewriteCond %{HTTP_HOST} !="" 
    RewriteRule ^(.*)$ https://мой.домен.org/$1 [R=301,L] 

    попробуйте.

    • +1
      Antonio Antonio 5 октября 2017 12:30 #

      Оказалось тоже что-то не правильно. С https://www.мойдомен.ru перенаправляет на http://www.мой-домен.ru, а должно на https://мойдомен.ru и код отдаёт 302, а не 301

      • +1

        Выложите что у вас в .htaccess корневом содержится.

        • +1
          Antonio Antonio 5 октября 2017 17:34 #

          Вот мой .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

          • +1

            В нем нет правила для редиректа c_www -> без_www

            • +1
              Antonio Antonio 5 октября 2017 21:55 #

              Понял. Пробовал ставить и ничего не меняется и webasyst где-то писал, что фреймворк сам делает редирект на без www

            • +1
              Antonio Antonio 5 октября 2017 21:57 #

              В обоих вариантах идёт редирект с https://www на http://www, а надо просто на https://

              • +1

                Как-то так

                AddDefaultCharset UTF-8
                RewriteEngine On
                DirectoryIndex index.php
                Options -Indexes -MultiViews
                php_value memory_limit 128M
                
                order allow,deny
                allow from all
                deny from 92.248.252.160
                deny from 146.185.223
                deny from 188.186.60
                
                RewriteCond %{HTTP_HOST} ^www\.мой\.домен\.com [NC] 
                RewriteRule ^(.*)$ https://мой.домен.com/$1 [R=301,L] 
                
                RewriteCond %{HTTP:HTTPS} !=on [NC]
                RewriteCond %{REQUEST_URI} !robots.txt
                RewriteRule ^(.*)$ https://домен.ru/$1 [R=301,L]
                
                <FilesMatch "\.md5$">
                Deny from all
                </FilesMatch>
                
                <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>

                если не поможет - тогда нужно смотреть по месту уже.

                • +1
                  Antonio Antonio 5 октября 2017 22:52 #

                  Спасибо. Попробовал. Вроде всё работает. Поддержка хостинга точно такую же схему предлагает. Единственное мне не понятно почему при проверке на Яндексе выдаёт код 302? Это же временное перенаправление и сначала на адрес http://www, а с него видимо на https.

                  Код статуса HTTP302 Moved Temporarily
                  Время ответа сервера8 мс
                  IP сайта77.222.56.22
                  Размер страницы161 Б

                  • Server: nginx/1.9.12
                  • Date: Thu, 05 Oct 2017 19:44:23 GMT
                  • Content-Type: text/html
                  • Content-Length: 161
                  • Connection: keep-alive
                  • Keep-Alive: timeout=10
                  • Location: http://www.домен.ru/

                  Содержимое страницы отсутствует

  • 0
    Antonio 4 октября 2017 13:31 #

    Спасибо большое. Попробовал первый вариант. Заменил мой код на этот. Получилось так:

    С 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]

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите