2013-07-03 3 views
5

Я хочу перенаправить с любого направления на наш сайт с протоколом HTTPS, но некоторые перенаправления он не работает. Я хочу это:Переадресация на HTTP не-www на HTTPS www htaccess

  • http://www.site.co К https://www.site.co
  • http://site.co К https://www.site.co

Это мой Htaccess:

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

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

Второе правило это не работает. Это происходит в другом направлении внутри нашего сайта, и оно не перенаправляется на сайт HTTPS.

+0

[Добро пожаловать в stackoverflow, пожалуйста, прочитайте ** SO Tour **. он поможет вам лучше всего использовать этот сайт] (http: // stackoverflow.com/about) – Prix

+0

Возможный дубликат [htaccess для перенаправления не-www на www при сохранении http и https] (http://stackoverflow.com/questions/6525348/htaccess-for-redirecting-non-www-to-www- while-preserveing-http-https) – Prix

+0

Спасибо за комментарии @Prix. Я пробую этот ответ, но не работал для меня. Я не знаю, в чем проблема на самом деле –

ответ

29

Попробуйте так:

RewriteEngine On 

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

RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] 

Единственная разница в том, что сначала мы перенаправлять от не-WWW для WWW, то мы проверяем для HTTPS и перенаправить его.

Если это не сработает, то попробуйте это один:

RewriteEngine On 

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

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] 
+0

Привет @Prix, спасибо за ваш ответ, но, к сожалению, пока не работает для меня. Возможно, это может быть проблема настройки виртуального хоста. Возможно??? –

+0

@AnibalMauricio уверены, что на вашем htaccess или php нет ничего другого, что могло бы вызвать это? – Prix

+0

ну, я просто понял, что эта страница является страницей по умолчанию для apache, поэтому проблема должна быть в конфигурации виртуальных хостов, не так ли? –

0

В случае, если вы используете One.com в качестве веб-хостинга, вы должны использовать следующий код вместо:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [L,R=301] 
RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 
12

ответ по Prix работает. Чтобы сделать его более динамичным, вы можете использовать SERVER_NAME и REQUEST_URI вместо статического имени домена.

RewriteEngine On 
#we replace domain.com/$1 with %{SERVER_NAME}%{REQUEST_URI}. 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^(.*) https://www.%{SERVER_NAME}%{REQUEST_URI} [L,R=301] 

#here we dont use www as non www was already redirected to www. 
RewriteCond %{HTTPS} off 
RewriteRule ^(.*) https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] 
+0

Но если мой URL-адрес -' https: // example.com/page' it не перенаправляется на WWW. Есть идеи? –

+0

'http: // example.com/page' успешно перенаправляется на www. –

0

Это будет использовать как для WWW или не WWW При попытке открыть ссылку с WWW, то URL перенаправления HTTPS с WWW

Example : http://domain.com redirect to https://domain.com 

или При попытке открыть ссылку с не- WWW затем URL перенаправления HTTPS с не-WWW

Example : http://www.domain.com redirect to https://www.domain.com 

RewriteEngine on 

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
-1
RewriteEngine On 

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

RewriteCond %{HTTPS} off 
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] 
0

к сожалению у меня нет достаточно точки комментировать, но правило @prix принесет ненужное перенаправление.

RewriteEngine On 

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

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] 

Вы можете попробовать http://domain.com/ на GTMETRIX, и вы получите это сообщение

"Avoid landing page redirects for the following chain of redirected URLs." 

http://domain.com/ 
http://www.domain.com/ 
https://www.domain.com/ 

Чтобы предотвратить это, пойти в первый RewriteRule и добавить «с» в конце HTTP. Новый набор правило будет выглядеть следующим образом:

RewriteEngine On 

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

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^(.*)$ https://www.domain.com/$1 [L,R=301] 
-1

Например https://example.com должен идти к https://www.example.com

RewriteEngine On 
RewriteCond %{SERVER_PORT} !=443 
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC] 
RewriteRule ^(.*)$ "https\:\/\/www\.example\.com\/$1" [R=301,L] 

Примечание - вы должны изменить example.com на свой собственный домен.

+4

Я не уверен, что это добавляет по существующим ответам - но есть ли причина, по которой вы не можете просто использовать example.com и www.example.com? –

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