重定向到HTTP非www到HTTPS www htaccess

Ani*_*cio 18 .htaccess

我想使用HTTPS协议从任何方向重定向到我们的网站,但有些重定向它不起作用.我要这个:

  • http://www.site.cohttps://www.site.co
  • http://site.cohttps://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]
Run Code Online (Sandbox Code Playgroud)

第二条规则不起作用.它会转到我们网站内的另一个方向,而不会重定向到HTTPS网站.

Pri*_*rix 46

试试这样:

RewriteEngine On

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

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 
Run Code Online (Sandbox Code Playgroud)

这里唯一真正的区别是,首先我们从非WWW重定向到WWW然后我们检查HTTPS并重定向它.

如果它不起作用,试试这个:

RewriteEngine On

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

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301] 
Run Code Online (Sandbox Code Playgroud)


小智 25

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]
Run Code Online (Sandbox Code Playgroud)


小智 5

抱歉,我没有足够的观点来评论,但 @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] 
Run Code Online (Sandbox Code Playgroud)

您可以在 GTMETRIX 上尝试http://domain.com/,您将收到此消息

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

http://domain.com/
http://www.domain.com/
https://www.domain.com/
Run Code Online (Sandbox Code Playgroud)

为了防止这种情况,请转到第一个 RewriteRule 并在 http 末尾添加“s”。新的规则集将如下所示:

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] 
Run Code Online (Sandbox Code Playgroud)