我有一个基于各种查询字符串加载的PHP Web应用程序。我需要应用程序才能要求身份验证,除非传递特定的查询字符串。
例如,如果网址为example.com/app/?Setting1=true 我想强制进行身份验证。
但是,如果网址是example.com/app/?Setting1=true&Setting2=true 我想绕过身份验证
我接近使用SetEnvIf Request_URI所需的内容,但我不确定如何将查询字符串变量包含到Request_URI中。
SetEnvIf Request_URI "(/app/test)$" allow
Order Deny,Allow
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
#Allow valid-user
Deny from all
Allow from env=allow
Satisfy any
我想要这样的事情:
SetEnvIf Request_URI "(/app/?Setting1=true&Setting2=true)$" allow
Order Deny,Allow
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/path/.htpasswd
AuthGroupFile /dev/null
#Allow valid-user
Deny from all
Allow from env=allow
Satisfy any
非常感谢您的任何建议。
答案 0 :(得分:0)
RewriteEngine On
SetEnvIf Request_URI ".*" allow=0
RewriteCond %{QUERY_STRING} ^(?:.*[&?])?Setting1=true&Setting2=true$
RewriteRule ^ - [E=allow:1]
RewriteCond %{QUERY_STRING} ^(?:.*[&?])?Setting2=true&Setting1=true$
RewriteRule ^ - [E=allow:1]
<If "%{ENV:allow} == '0'">
AuthUserFile /home/path/.htpasswd
AuthType Basic
AuthName "Restricted Access"
Require user valid-user
</If>
注意:
也可以使用mod_rewrite模块设置环境变量: