Apache 有条件地将一页重定向到 HTTP 或 HTTPS

标签 apache .htaccess redirect ssl https

我们网站的主页兼作登录页面和主页面,用户可以在其中单击指向内容的链接。我试图做到这一点,以便当主页充当登录页面时,它使用 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?

最佳答案

你能试试这两条规则吗:

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]

关于Apache 有条件地将一页重定向到 HTTP 或 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31482272/

相关文章:

.htaccess - 仅允许 IP 的目录列表

ubuntu 中的 php 项目。正确路径但禁止访问

http - 将页面重定向到新的 URL 而不会丢失 SEO

php - websockets 连接因 apache 和 Ratchet 而失败

java - 如何在类的 Timer 方法中可见 HTML 标记组件

apache - 您无权访问此服务器上的/nagios/

apache - Tortoise SVN 重定向循环 [CENTOS 5.8/WHM]

regex - htaccess 如何将子目录重定向到外部 URL

javascript - 我们可以用 javascript 做 302 重定向吗?

apache - Heroku 上的 SSL 重定向配置在访问根域时导致错误 403(禁止访问)