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

最佳实践: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。我已经按照所需的步骤在我的 Tomcat 中安装了证书。 我一直关注的导师是https://www.mulesoft.com/tcat/tomcat-security 我已经强制使用 https over http,这意味着任何对 http 的请求都将转发到 https。我在服务器中进行了以下更改.xml 查看更多:https://www.mules