这两个代码片段有啥区别?
Posted
技术标签:
【中文标题】这两个代码片段有啥区别?【英文标题】:What is the difference between these 2 snippets of code?这两个代码片段有什么区别? 【发布时间】:2021-01-06 05:48:11 【问题描述】:两个 sn-ps 都将 http 重定向到 https,但一个适用于 AWS Cloudfront 分发,而另一个不适用。就其本身而言,两者都可以正常工作。这2个sn-ps的代码有什么区别?
RewriteEngine On
RewriteCond %HTTPS !=on
RewriteCond %HTTP_HOST !^(localhost|127.0.0.1)
RewriteRule ^/(.*) https://example.com/$1 [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]
【问题讨论】:
【参考方案1】:嗯,两者之间有一些区别。
第一个块将重定向到https://example.com/*
如果HTTPS
不是ON
如果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]
标志。
【讨论】:
以上是关于这两个代码片段有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章