27

我想使用 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]

第二条规则不起作用。它会在我们的站点内转到另一个方向,并且不会重定向到 HTTPS 站点。

4

12 回答 12

62

试试这样:

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] 

这里唯一真正的区别是,首先我们从非 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] 
于 2013-07-03T21:26:16.323 回答
28

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]
于 2015-07-05T19:23:46.123 回答
4

对不起,我没有足够的评论点,但@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] 

您可以在 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/

为防止这种情况,请转到第一个 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] 
于 2016-10-12T21:17:41.167 回答
3

这是使用.htaccess的http 到 https非 www 到 www 的重定向

如果您想重定向到 https 和 www,您可以使用此代码

http到https重定向:

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

非 www 到 www 重定向:

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

如果您想使用展位功能,请分别放置以上所有代码

于 2018-10-26T10:47:31.760 回答
2

如果您使用 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]
于 2015-01-29T14:44:11.463 回答
1

我有一个 asp.net 网站,主机提供商不支持 IIS 重写模块我已经测试了所有这些方法,只有这个代码给 woorank.com 确认可能对另一个 .net 开发人员有用:

RewriteEngine on
RewriteBase /

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

RewriteCond %{HTTPS} !on
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [L,R=301]
于 2019-09-20T20:47:54.933 回答
0

只需将以下内容放入.htaccess文件中

 RewriteEngine on

 RewriteCond %{SERVER_PORT} 80 
 RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
于 2018-10-26T11:49:14.503 回答
0

我用这个:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [END,NE,R=permanent]
于 2019-03-17T01:51:03.283 回答
0

试试这个方法:

# Redirect 301 all to https://www
<IfModule mod_rewrite.c>
   RewriteCond %{HTTPS} off [OR]
   RewriteCond %{HTTP_HOST} !^www\. [NC]
   RewriteCond %{HTTP_HOST} ^(.*)$  [NC]
   RewriteRule (.*) https://www.example.com/$1 [L,R=301]
</IfModule>

为什么有时您不需要代码%{HTTP_HOST}并在最后一行使用带有 www 的域确切 url,因为通常结果将有两个 www,例如:

https://www.www.yourdomain.com

顺便说一句,如果您使用 cloudflare,只需创建 pagerules 将 301 全部重定向到 https 和 www 版本。

创建 pagerules 填充

example.com/*

选择设置转发 url 然后选择 301 并填写这个

https://www.example.com/$1

保存它,所有将被重定向到 https 和 www 版本。

于 2019-08-19T06:05:15.313 回答
0

这将用于 www 或非 www 如果您尝试使用 www 打开链接,则 url 重定向到带有 www 的 https

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

或者如果您尝试使用非 www 打开链接,则 url 重定向到非 www 的 https

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]
于 2016-05-02T09:10:05.883 回答
-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] 
于 2016-10-04T08:10:17.697 回答
-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 更改为您自己的域。

于 2018-02-21T09:29:53.150 回答