Regex 在htaccess到Set环境中确定HTTPS

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_

我只想在请求为“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_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看看是什么错误吗?我没有查看日志的权限。我会要求同样的,然后给你回复。谢谢