简单条件,永不匹配并设置变量:
SetEnvIf Request_URI "^/path/to/something*" access_granted
使用 PHP 检查 URI 给出了正确的字符串,但是从未设置变量。
echo getenv('Request_URI'); --> /path/to/something
echo getenv('access_granted'); --> <<empty>>
就这么简单,但仍然总是无法匹配。
更新:有趣的是,我可以通过字符串实现 access_granted=1:
SetEnvIf Request_URI "^/path/*" access_granted
/path
也是 RewriteBase - 也许它以某种方式连接,我不知道
答案1
您所面临的问题可能是由 mod_rewrite 引起的,正如解释的那样 在下面。重写规则在应用 setenv 之前应用,以便将重写的请求 uri 传递给它。尝试在重写时设置 env 变量。
答案2
的第二个参数SetEnvIf
应该是正则表达式,因此它应该读作:
SetEnvIf Request_URI ^/path/to/something.* access_granted
你的第二次尝试:
SetEnvIf Request_URI "^/path/*" access_granted
有效,因为确实有 0 个或更多“/”符号跟在后面/path
换句话说 - 您尝试在需要 regexp 的地方使用 shell glob。
答案3
我知道这是一个老话题,但是我在当前的研究中遇到了它,也许其他人也会有相关的问题......
对我来说,以下代码运行良好,重写后表达式匹配!
网址: www.example.de/lockthissite/
.htaccess 代码:
SetEnvIfNoCase Request_URI ^/lockthissite/$ SECURED=yes
AuthType Basic
AuthName "restricted access"
AuthUserFile /path/to/my/.htpasswd
Require valid-user
Satisfy any
Order allow,deny
Allow from all
Deny from env=SECURED
答案4
简单的解决方案。 Request_URI
不是环境变量的名称,您正在设置一个名为的变量access_granted
。