我有一个基于各种查询字符串加载的php web应用程序。我需要应用程序要求身份验证,除非传递了特定的查询字符串。
例如,如果url是example.com/app/?设置1=真
我想强制认证。
但是,如果url是example.com/app/?设置1=真设置2=真
我想绕过身份验证
我已经接近使用setenif 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

非常感谢你的建议。

最佳答案

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>

注:
setenif不支持查询字符串参数。请参考下面的链接。
mod_setenvif
也可以使用mod_rewrite模块设置环境变量:
mod_rewrite

关于php - 绕过特定URI的.htaccess授权,包括查询字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25311925/

10-13 02:44