【问题标题】:.htaccess ssl & non-ssl redirects.htaccess ssl 和非 ssl 重定向
【发布时间】:2013-06-11 02:51:11
【问题描述】:

我正在尝试编写一些简单的规则来为几个 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]

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

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

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

    当请求 HTTPS 并且 URL 不是 sign-inregister 时,第二条规则将所有流量重定向到非 SSL。

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

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

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

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

    【讨论】:

    • 我遇到的问题是当我尝试访问 /register 时。我已经打开了重写日志,它试图一遍又一遍地访问 https /register。基于我试图实现的目标是保护 /register 和 /sign-in 并强制所有其他人使用 http - 你知道我应该如何修改我的规则吗?
    • 仅供参考 - 在填写注册表或登录表格时,我总是发回相同的网址
    • 他们登录后会去哪个目录?还是您只使用 SSL 进行身份验证,然后将它们放回 HTTP?
    • 他们一旦登录就可以访问一堆不同的目录,而不是 /admin/* 或 /member/* 等,所以我需要能够指定哪些目录是 ssl 与非 ssl
    猜你喜欢
    • 2014-11-24
    • 2015-03-20
    • 2014-07-19
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2012-01-18
    • 2016-04-02
    • 2017-09-23
    相关资源
    最近更新 更多