在 htaccess 中确定 HTTPS 以设置环境
Posted
技术标签:
【中文标题】在 htaccess 中确定 HTTPS 以设置环境【英文标题】:Determine HTTPS in htaccess to Set Environment 【发布时间】:2014-05-03 21:54:36 【问题描述】:只有当请求是“https”时,我才想将用户重定向到身份验证页面。
目前我已经在我的 .htaccess 文件中编写了以下内容来做同样的事情,但它不起作用。
SetEnvIf Request_Protocol ^HTTPS.* IS_HTTPS
AuthType shibboleth
AuthName "Login"
ShibRequireSession on
require user abcd
Allow from env=IS_HTTPS
确定 HTTPS 的正则表达式是否正确?早些时候我有如下的 SetEnvIf 语句。这也没有奏效。
SetEnvIf %SERVER_PORT ^80$ IS_NON_SSL
AuthType shibboleth
AuthName "Login"
ShibRequireSession on
require user abcd
Allow from env=!IS_NON_SSL
但根据 SetEnvIf 指令 (http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html) 的文档,SERVER_PORT 变量不可用。
【问题讨论】:
【参考方案1】:我不认为值 Request_Protocol
可以用来确定这一点 - 根据您链接的文档页面,其中包含类似 的内容(例如,“HTTP/0.9”、“HTTP/1.1” ,等等)——所以协议本身总是HTTP
;这是有道理的,因为HTTPS
不是真正的“协议”,而只是 HTTP 的通用名称,并在其下方的 OSI 级别上“包裹”了 TLS (6)。
我不确定请求处理的实际顺序(我现在不知道在哪里可以找到它)——但也许你可以将它与 mod_rewrite
结合起来以实现你想要的? RewriteCond
能够通过检查变量 HTTPS
的值 on
来检查是否使用了 HTTPS - 并且遵循该条件的 RewriteRule
可以使用 [E]
标志为您设置环境变量 - 类似于这个:
RewriteCond %HTTPS ^on$
RewriteRule . - [E=IS_HTTPS]
这会将环境变量 IS_HTTPS 设置为空值,但这应该足以使用Allow from env=IS_HTTPS
进行检查。
介意试试这个吗?正如我所说,我不确定这是否会因为处理订单而起作用 - 但尝试花费 nuffin,对吧?
【讨论】:
【参考方案2】:你可以试试:
SetEnvIf Request_Protocol ^HTTPS.* IS_HTTPS
AuthType shibboleth
AuthName "Login"
ShibRequireSession on
require user abcd
Satisfy any
Order deny,allow
Deny from all
Allow from env=IS_HTTPS
【讨论】:
执行此操作时出现内部服务器错误。知道我做错了什么吗? 嗯,你能检查一下 Apache error.log 看看是什么错误吗? 我没有查看日志的权限。将要求相同并回复您。谢谢。以上是关于在 htaccess 中确定 HTTPS 以设置环境的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .htaccess 中创建别名以直观地隐藏 URL 的目录路径