Apache SetEnvIf无法匹配Request_Uri

简单的条件,永远不会匹配和设置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