1

我正在尝试编写一些简单的规则来为几个 URL 重定向到 https 并为其他 URL 重定向到 http。以下是我当前的设置,但它会导致重定向循环。谁能告诉我我做错了什么。

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^\/(sign-in|register)+ [NC]
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^\/(sign-in|register)+ [NC]
RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1 [R=301,L]
4

1 回答 1

0

当请求者未指示 HTTPS 时,第一个规则集将所有流量重定向到 HTTPS,仅当他们尝试访问sign-inregister页面时。

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^\/(sign-in|register)+ [NC]
RewriteRule ^(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]

sign-in第二条规则是在请求 HTTPS 并且 URL 为 NOT或时将所有流量重定向到非 SSL register

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^\/(sign-in|register)+ [NC]
RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1 [R=301,L]

两个重定向都使用浏览器缓存的 301 重定向,因此如果在某些时候您不小心重定向到了错误的位置,则可能会使用该重定向来代替您在此处发生的情况。

问题是当您在登录后尝试访问页面时,您将被重定向回HTTPS. 因此,如果您没有在登录目录中处理登录请求,或者您将它们从 HTTPS 重定向回。

如果登录或注册文件夹中没有的任何内容在 HTTPS 和 HTTP 之间来回反弹,则可能存在大量重叠。

于 2013-06-11T03:20:01.573 回答