【发布时间】:2016-01-03 13:30:35
【问题描述】:
我已经设置了htaccess 文件来处理具有特定规则的用户请求和具有其他规则的通用请求:
# users requests (i.e. users/login.html)
RewriteRule ^users/([^/]+)\.html$ mvc.php?rt=users/$1 [L,QSA,NC]
# generic requests (controller/action/id.html)
RewriteRule ^([^/]+)/([^/]+)/([^/]+)\.html$ mvc.php?rt=$1/$2&id=$3 [L,QSA,NC]
# generic requests (controller/action/)
RewriteRule ^([^/]+)/([^/]+)/$ mvc.php?rt=$1/$2 [L,QSA,NC]
# generic requests (controller/id.html)
RewriteRule ^([^/]+)/([^/]+)\.html$ mvc.php?rt=$1&id=$2 [L,QSA,NC]
# generic requests (controller.html)
RewriteRule ^([^/]+)\.html$ mvc.php?rt=$1 [L,QSA,NC]
RewriteRule ^$ mvc.php?rt=index [L,QSA,NC]
这工作正常,并且 URL 翻译得到正确处理。我现在的目标是强制所有用户请求通过 HTTPS 发送。我正在尝试按照RewriteHTTPToHTTPS 中的说明设置重定向规则。我知道这不是推荐的解决方案,但我的服务器似乎不支持VirtualHost 语句。这是我的代码:
# users http to https
RewriteCond %{HTTPS} !=on
RewriteRule ^users(.*) https://%{SERVER_NAME}/users$1 [R,L]
不幸的是,这似乎不起作用,因为我需要在所有规则之后插入L 标志,这会导致处理在满足规则时停止。因此,如果首先在 htaccess 中插入 http-to-https 规则,则满足此规则并忽略用户特定规则(其他情况反之亦然)。
有没有办法做到:
- 使用特定规则处理用户请求
- 强制通过 HTTPS 发送用户请求
有htaccess 规则?
【问题讨论】:
-
为什么你只想将某些请求重定向到 https ?你知道它不安全并且不能防止 MITM+sslstrip 吗? (唯一的保护是对整个域使用 https 并激活 HSTS)
-
@Tom:实际上,我认为保护包含敏感数据的页面(例如用户页面)就足够了。此外,认为强制通过 HTTPS 发送通用页面(例如条款和条件页面)是没有用的。但我不知道你指出的问题。所以你的建议是通过 htaccess 强制所有请求通过 HTTPS?
标签: apache .htaccess mod-rewrite redirect https