Apache перенаправляет http на https и www на non www

в основном то, что я хочу, это перенаправление al request для использования HTTPS вместо http

У меня есть это в моем htaccess, и он отлично работал: Код:

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
</ifModule> 

сегодня кто-то заметил, что, когда собираешься: http://www.example.com он перенаправляет и показывает незащищенную связь.

Мой ssl настроен для не www-домена: mydomain.com

Поэтому мне нужно убедиться, что все запросы на сайт отправляются не на www и https: Он отлично работает, если я приведу example.com, он перенаправляется на https://example.com

но с www.example.com он переходит на htts://www.example.com и показывает ошибку

что мне нужно добавить в мой код для перенаправления www на non www, а затем в ssl

Ответы

Ответ 1

Вы можете получить то, что вам нужно от HTTP_HOST

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

Таким образом, он будет получать хост всегда без субдомена.

Ответ 2

Вам придется повторно выдать свой сертификат как на www, так и без www.

Если кто-то подключается к вашему сайту с помощью имени домена, которое не входит в ваше общее имя, оно получит предупреждение.

Процесс ssl negociation имеет до любой ответ с сервера (в вашем случае перенаправление), поэтому во всех случаях ваши посетители получат предупреждение при использовании домена, который не находится в вашем общее имя.

Ответ 3

RewriteEngine On 
RewriteCond %{HTTPS} off
RewriteRule (.*) https://domain.com%{REQUEST_URI} [L,R=301,NC]
RewriteCond %{HTTP_HOST} ^www.domain.com [NC]
RewriteRule (.*) https://domain.com%{REQUEST_URI} [L,R=301,NC]

Ответ 4

Если вы используете бесплатную учетную запись CloudFlare, тогда это проблема. Бесплатная учетная запись CloudFlare НЕ поддерживает SSL-сертификаты. Чтобы продолжить использование бесплатной учетной записи CloudFlare с SSL-сертификатом, просто перейдите к настройкам DNS в CloudFlare и снимите оранжевое облако с вашего домена и выйдите из cname WWW. Это исправит вашу проблему и вызовет перенаправление WWW и non-www на https.

Также не забудьте добавить этот код в ваш .htaccess файл:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Тогда все должно работать!

Ответ 5

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