Regex 在htaccess到Set环境中确定HTTPS
我只想在请求为“https”时将用户重定向到身份验证页面 目前,我已经在.htaccess文件中编写了以下内容来执行相同的操作,但它不起作用Regex 在htaccess到Set环境中确定HTTPS,regex,apache,.htaccess,mod-rewrite,httpd.conf,Regex,Apache,.htaccess,Mod Rewrite,Httpd.conf,我只想在请求为“https”时将用户重定向到身份验证页面 目前,我已经在.htaccess文件中编写了以下内容来执行相同的操作,但它不起作用 SetEnvIf Request_Protocol ^HTTPS.* IS_HTTPS AuthType shibboleth AuthName "Login" ShibRequireSession on require user abcd Allow from env=IS_HTTPS SetEnvIf %{SERVER_PORT} ^80$ IS_
SetEnvIf Request_Protocol ^HTTPS.* IS_HTTPS
AuthType shibboleth
AuthName "Login"
ShibRequireSession on
require user abcd
Allow from env=IS_HTTPS
SetEnvIf %{SERVER_PORT} ^80$ IS_NON_SSL
AuthType shibboleth
AuthName "Login"
ShibRequireSession on
require user abcd
Allow from env=!IS_NON_SSL
用于确定HTTPS的正则表达式是否正确?早些时候,我有如下setenif语句。这也没用
SetEnvIf Request_Protocol ^HTTPS.* IS_HTTPS
AuthType shibboleth
AuthName "Login"
ShibRequireSession on
require user abcd
Allow from env=IS_HTTPS
SetEnvIf %{SERVER_PORT} ^80$ IS_NON_SSL
AuthType shibboleth
AuthName "Login"
ShibRequireSession on
require user abcd
Allow from env=!IS_NON_SSL
但是根据setenif指令()的文档,SERVER\u PORT变量不可用 您可以尝试:
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
我不认为值
Request\u Protocol
可以用来确定这一点——根据您链接的文档页面,它包含类似的内容(例如,“HTTP/0.9”、“HTTP/1.1”等)——因此协议本身将始终是HTTP
;这是有道理的,因为HTTPS不是真正的“协议”,而只是HTTP的通用名称,在它下面的OSI级别上,TLS“包裹在它周围”(6)
我不确定请求处理的实际顺序(现在我不知道在哪里可以找到它)——但也许你可以将它与mod_rewrite
结合起来,以实现你想要的?RewriteCond
可以通过检查变量HTTPS
上的值,来检查是否使用了HTTPS,并且遵循该条件的RewriteRule
可以使用[E]
标志为您设置一个环境变量,如下所示:
RewriteCond %{HTTPS} ^on$
RewriteRule . - [E=IS_HTTPS]
这将使用空值设置环境变量IS_HTTPS,但这足以使用Allow from env=IS_HTTPS
检查它
介意试试吗?正如我所说的,由于处理订单的原因,我不确定这是否会起作用,但尝试“成本计算”,对吗?我在执行此操作时遇到了一个内部服务器错误。知道我做错了什么吗?嗯,你能检查Apache error.log看看是什么错误吗?我没有查看日志的权限。我会要求同样的,然后给你回复。谢谢