2015-10-21 4 views
1

Похоже, что перед этим задавались различные перестановки этого вопроса, но похоже, что все ответы имеют специфические особенности, которые не относятся к моей ситуации или просто не работают.Использование .htaccess для перенаправления http: //, http: // www. И https: // www. https: //

Итак, вот что я после ...

Я хотел бы эти три адреса:

  1. http://example.com
  2. http://www.example.com
  3. https://www.example.com

... Все перенаправляются на:

https://example.com

С другой стороны, я попробовал это;

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule^https://%1%{REQUEST_URI} [R=301,L] 

    RewriteCond %{HTTPS} off 
    RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule> 

Но, что не перенаправляет от https://www.example.com к https://example.com

Таким образом, результатом является сертификат предупреждение (поскольку мой сертификат действителен только для example.com, а не www.example.com).

Я также попытался это (от https://html5boilerplate.com/) ...

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTPS} !=on 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] 
</IfModule> 

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule^%{ENV:PROTO}://%1%{REQUEST_URI} [R=301,L] 
</IfModule> 

... Но это не сработало:

Than ks за вашу помощь.

ответ

2

Try:

RewriteEngine On 
RewriteCond %{HTTPS} off [OR] 
RewriteCond %{HTTP_HOST} ^www\. 
RewriteRule^https://example.com%{REQUEST_URI} [L,R=301] 

Это использует флаг в OR условие таково, что редирект происходит, когда она либо не HTTPS или если хост начинается с «WWW».

Что-то еще, что стоит отметить здесь:

, так как мой сертификат действителен только для example.com, а не www.example.com

Протокол SSL рукопожатия происходит перед запрос HTTP отправлено. Это означает, что mod_rewrite или htaccess не являются частью уравнения, когда вы запрашиваете https://www.example.com/, браузер увидит сертификат и сразу же помечает его как исключение безопасности. Вы ничего не можете сделать, кроме покупки нового сертификата.

2

Вы не можете этого сделать.

HTTPS - внешняя оболочка (транспортный слой, как следует из названия). Первый уровень HTTPS должен работать (и устранены проблемы с сертификатами) до того, как сервер получит заголовки запросов, может определить хост HTTP 1.1 и может отправить заголовок Location.

Для того, чтобы работать, вы должны либо нужно «подстановочные сертификат», который действителен для обоих example.comиwww.example.com или двух различных сертификатов для указанных хостов, один заплатил за только обеспечить переадресацию.

Это трудно принять, но так оно и работает.

Было бы здорово, если бы ЦС окончательно согласились с тем, что www.domain и domain должны идти с одним - если несколько, но не дважды или более дорогостоящим - сертификатом.

Смежные вопросы