当前位置: 首页 > 知识库问答 >
问题:

最佳实践:301将HTTP重定向到HTTPS(标准域)

袁谭三
2023-03-14

我一直在寻找完美的301重定向。但我发现了这么多的解决方案,不知道什么是最好的。

这是我想做的

  • http://domain.tld/ → https://domain.tld/
  • http://www.domain.tld/ → https://domain.tld/
  • https://www.domain.tld/ → https://domain.tld/

最佳实践。

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

这是我喜欢的代码。至少现在是联合利华。

替代方法

我还发现了许多其他方法可以从HTTP重定向到HTTPS。例如:

1.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

错过一步?这里没有[R=301,L]

2.

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

不同的顺序通常更好吗?

我应该用吗

RewriteRule ^(.*)$

而不是

RewriteRule (.*)

?

3.

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L,NE]

使用完整域名是否有任何性能优势?我真的需要NE?([R=301,L,NE][L,R=301]

所以,我对所有专家的问题是:从HTTP重定向到HTTPS和从重定向到HTTPS://的最佳(执行)方式是什么?

共有3个答案

那利
2023-03-14
    RewriteEngine On   
    RewriteCond %{HTTPS} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

无需更改,只需复制和粘贴即可。

孔厉刚
2023-03-14

所以,冷凝,这变成;

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

如果你看到任何虫子,请告诉我

荆修明
2023-03-14

从您最喜欢的解决方案开始:

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

在处理非https URL的部分中,您将重定向到%{HTTP\u HOST}。然后,如果您的主机名以“www”开头,则必须进行第二次重定向才能将您从https://www.domain.tld到https://domain.tld这应该是你的最终目的地。

您可以通过使用

RewriteRule ^(.*)$ https://domain.tld/%{REQUEST_URI} [L,R=301]

直接在第一条规则中。第二条规则将只适用于试图访问https://www.domain.tld的客户端。

备选案文1。由于相同的原因(缺少HTTP\u主机可能是www.domain.tld)以及缺少[L,R=301]的情况,不起作用。这是必要的,因为您不会像在其他类型的重写规则中那样在此处重写URL。您正在请求客户端更改其请求的类型-这就是您向他发送HTTP代码301的原因。

关于匹配部分的ReWriteLaw本身,您应该是一致的:如果您想要捕获URI的部分,您将使用带括号的正则表达式。因为您实际上是作为一个整体在这里使用它,所以只需为“任何东西”使用一个替代方案就可以了,比如^,然后稍后使用%{REQUEST_URI}。如果您使用一些捕获(即(some_regex),您应该在目标中使用1美元(或任何您要引用的内容)来引用它。

在第三种选择中,同样缺少www https。

您可以检查https是否关闭,或者域名是否在一个规则中包含一个前导的“www”,但是重写条件与“和”隐式连接。

因此,它应该是:

RewriteCond %{HTTPS} off          [OR]
RewriteCond %{HTTP_HOST} ^www\.   [NC]
RewriteRule ^ https://domain.tld%{REQUEST_URI} [R=301,L,NE]

NE对于将GET参数之类的内容传递到新URI是必需的,请参阅:

http://httpd.apache.org/docs/2.4/rewrite/flags.html

 类似资料:
  • 我们使用拉维5。要将http连接重定向到https,请使用中间件HttpsProtocol。 在我们的4个测试用例中,只有1个正确工作(最后一个重定向)。其他3种情况的中间件添加了url extra index.php。 http://www.aqualink.az/index.php ---

  • 问题内容: 在python中,您通常使用PEP 8-Python代码样式指南 作为您的编码标准/准则吗?您还有其他更喜欢的正式标准吗? 问题答案: “在python中,您通常使用PEP 8-Python代码样式指南作为您的编码标准/准则吗?您是否还需要其他正式的标准?” 如您所提到的,请遵循PEP 8作为主要文本,并遵循PEP 257 作为文档字符串约定 与Python样式指南一起,建议您参考以下

  • 问题内容: 我如何在Spring Webflux中配置http-> https重定向?我需要将所有请求重定向到(据我所知,任何请求都应具有http状态响应,并带有更改http-> https)。在文档中未找到有关此信息的任何信息。我找到了这个答案,但它与tomcat有关。我有净值。 问题答案: 我找到了方法,希望对您有所帮助:

  • 如何在spring WebFlux中配置HTTP->HTTPS重定向?我需要将所有请求重定向到(根据我的理解,任何请求都应该具有http状态响应,并更改HTTP->HTTPS)。在文档中没有找到任何关于它的信息。我找到了这个答案,但它与Tomcat有关。我有奈蒂。

  • 我有一个域有3个子域: 在我的nginx上有以下3个配置: API null

  • 本篇文档的目的在于如何让系统管理员或开发者用尽可能少的时间部署一个安全的 web 站点或应用,即 SSL 和 TLS 部署最佳实践。