这两个代码片段有什么区别?

What is the difference between these 2 snippets of code?

这两个代码段都是将 http 重定向到 https,但一个适用于 AWS 云端分发,而另一个则不能。就其本身而言,两者都可以正常工作。这两段代码有什么区别?

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} !^(localhost|127.0.0.1)
    RewriteRule ^/(.*) https://example.com/ [R,L] 
RewriteEngine On
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

嗯,两者之间有一些区别。

第一个块将重定向到 https://example.com/*

如果 HTTPS 不是 ON AND 如果 HTTP_HOST 既不是 localhost 也不是 127.0.0.1

第二个块将重定向到与使用 https 协议的请求中使用的主机相同的主机。

例如:

发件人:http://www.example.com/test?1=2&3=4

收件人:https://www.example.com/test?1=2&3=4

如果 HTTPS 不是 ON 或者如果 HTTP_HOSTwww.example.com(案例激励)。

由于它将重定向到与请求中的主机相同的主机,这很可能会造成无限循环。关键区别在于您的条件中指定的 [OR] 标志。