我们网站的主页兼作登录页面和主页面,用户可以点击指向内容的链接。我正在尝试这样做,以便当主页充当登录页面时,它使用HTTPS并在所有其他场合使用HTTP。当没有用户当前登录时,主页充当登录页面(我可以检查cookie):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_COOKIE} ^((?!MY_LOGIN_COOKIE_NAME).)*$ # Cookie is not present
RewriteRule ^/?$ https://%{SERVER_NAME} [R,L] # Redirect http://example.com to https://example.com
这会将匿名用户带到SSL主页,正如预期的那样。
问题是当cookie确实存在时,如何对主页的请求始终重定向到HTTP版本而不是HTTPS版本? (在用户登录后,它们将被带回主页,但现在它将显示内容)。
我尝试将其添加到上述规则的末尾:
RewriteCond %{HTTP_COOKIE} ^.*MY_LOGIN_COOKIE_NAME=([^;]+) # Cookie exists
RewriteRule ^/?$ http://%{SERVER_NAME} [R,L] # Redirect home page to HTTP only
这导致重定向循环错误,很可能是因为正则表达式匹配主页,重定向到http版本,再次匹配,重定向到http版本。 。 。无限。
有没有办法让主页在缺少cookie时重定向到HTTPS,并在存在时重定向到HTTP?
答案 0 :(得分:0)
你可以尝试这两条规则:
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP_COOKIE} !MY_LOGIN_COOKIE_NAME [NC]
RewriteRule ^/?$ https://%{SERVER_NAME} [R,L]
RewriteCond %{SERVER_PORT} =443
RewriteCond %{HTTP_COOKIE} MY_LOGIN_COOKIE_NAME [NC]
RewriteRule ^/?$ http://%{SERVER_NAME} [R,L]