简单的条件,永远不会匹配和设置variables:
SetEnvIf Request_URI "^/path/to/something*" access_granted
使用PHP检查URI是给出正确的string,但是从不设置variables。
echo getenv('Request_URI'); --> /path/to/something echo getenv('access_granted'); --> <<empty>>
这样简单,但仍然总是失败。
更新:有趣的一点是,我可以通过string来实现access_granted = 1:
SetEnvIf Request_URI "^/path/*" access_granted
/path也RewriteBase – 也许它是连接不知何故,我不知道
SetEnvIf第二个参数应该是正则expression式,所以它应该如下所示:
SetEnvIf Request_URI ^/path/to/something.* access_granted
你的第二次尝试:
SetEnvIf Request_URI "^/path/*" access_granted
因为确实你在/path后面有0或更多的“/”符号
换句话说 – 你已经试图使用shell的地方预计正则expression式。
您正面临的问题可能是由mod_rewrite引起的,如下所述。 在应用setenv之前应用重写规则,以便将重写的请求uri传递给它。 尝试在重写时设置envvariables。
解决scheme简单 Request_URI不是环境variables的名称,您正在设置一个名为access_granted的variables。
我知道这是一个老话题,但我在当前的研究中遇到过,也许其他人会有相关的问题…
对于我来说,下面的代码工作正常,重写后expression式匹配!
url: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