这两个代码片段有什么区别?
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_HOST
是 www.example.com
(案例激励)。
由于它将重定向到与请求中的主机相同的主机,这很可能会造成无限循环。关键区别在于您的条件中指定的 [OR]
标志。
这两个代码段都是将 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_HOST
是 www.example.com
(案例激励)。
由于它将重定向到与请求中的主机相同的主机,这很可能会造成无限循环。关键区别在于您的条件中指定的 [OR]
标志。