Как перенаправить https://www.example.com на https://example.com - PullRequest
2 голосов
/ 25 апреля 2011

Я огляделся и не могу найти окончательного решения для этого.У нас небольшая проблема с несколькими или нашими посетителями, которые набирают в нашем домене, например, так:

https://www.example.com - это предупреждение системы безопасности "Есть проблема с сертификатом безопасности этого сайта".

У нас есть SSL, настроенный для example.com

Так что, если кто-то наберет http://www.example.com или www.example.com, он будет перенаправлен на https://example.com, что прекрасно работает.

Вот что у меня есть в моем файле .htaccess:

Options +FollowSymLinks 
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteCond %{SERVER_PORT} !^443$ [OR]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,NC,L]

Ответы [ 5 ]

2 голосов
/ 25 апреля 2011

редактировать:

Большинство SSL-сертификатов выдаются для определенного имени хоста, например, www.example.com или просто example.com (и для *.example.com могут быть сертификаты подстановочных знаков), так что это может иметь место.

Возможно, превращение субдомена www. в необязательное совпадение в последнем RewriteCond может помочь получить пользователя в домене, указанном в сертификате:

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*) [NC]

2 голосов
/ 02 сентября 2011

Я думаю, что проблема не в правилах перезаписи / перенаправления, а в том, как http-серверы обрабатывают ssl-соединение. Прежде чем даже сервер получит возможность изучить правила перезаписи / перенаправления, произойдет рукопожатие SSL, и если у нас будет сертификат для example.com и мы введем URL, соединение www.example.com будет прервано из-за недействительного сертификата. Проверьте сами, установите условие перенаправления, чтобы указать URL www.example.com на example.com на защищенном домене SSL. Сначала вы получите неверную ошибку сертификата, но когда вы добавите исключение в браузер, вы заметите, что оно работает.

0 голосов
/ 23 января 2015

Во-первых, вам понадобится сертификат SSL, который охватывает как www.xxxx.yyy, так и xxxx.yyy. Ваш провайдер может покрыть оба, если вы получите сертификат за www.xxxx.yyy, но только xxxx.yyy, если вы получите его за это. Внимательно прочитайте их условия.

Я прочитал так много предложений о том, как перенаправить, со всевозможными специальными мнениями, с различными результатами, и в основном без каких-либо формальных объяснений.

Конечно, это означает, что нужно перейти к ссылке на Apache .htaccess и работать с первыми принципами.

Просто повторюсь, главное требование - перенаправить все запросы http (s) на https://xxxx.yyy.

Как всегда, включите механизм перезаписи:

RewriteEngine On

Для http это:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://xxx.yyy/$1 [L,R]

Однако, сделав то же самое для https (порт = 443), вызовет цикл, который сработает с ошибкой. Мы должны ограничить процесс только для https и www. Мы делаем это, предоставляя два RewriteCond оператора подряд, которые рассматриваются как неявные AND:

RewriteCond %{SERVER_PORT} 443
RewriteCond %{HTTP_HOST} ^www[.].+$
RewriteRule ^(.*)$ https://xxxx.yyy/$1 [L,R]

В конце RewriteRule, [L,R] говорит механизму перезаписи:

  1. L = остановиться на этом правиле. То есть, если правило выполняется из-за того, что его условия (RewriteCond) были выполнены, остановитесь, когда закончите, иначе перейдите к следующему набору условий / правил.
  2. R = выдать HTTP-перенаправление (код по умолчанию = 302) в браузер, чтобы можно было предпринять пользовательские или автоматические действия для обновления закладок, чтобы они всегда использовали https://xxxx.yyy в будущем.
0 голосов
/ 18 мая 2012

То, что вы пытаетесь сделать, невозможно.Если пользователь получает доступ к www.domain.cc через SSL, вы получите ошибку сертификата, если у вас нет действительного сертификата SSL - даже если все, что вам нужно, это перенаправить их на правильный сайт.

Вам потребуется либо новый сертификат для www.domain.cc, либо убедить своего регистратора предоставить вам групповой сертификат для * .domain.cc, либо сертификат с несколькими свойствами subjectAltName.См. http://www.crsr.net/Notes/Apache-HTTPS-virtual-host.html

Или запросите СНС http://en.wikipedia.org/wiki/Server_Name_Indication

0 голосов
/ 25 апреля 2011

Попробуйте это

RewriteCond %{HTTP_HOST} ^[a-z0-9-]+\.[a-z]+$
RewriteRule !"" https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC]

вместо

RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,NC,L]
...