在PHP中使用mod_rewrite访问环境变量集

在PHP中使用mod_rewrite访问环境变量集,php,mod-rewrite,Php,Mod Rewrite,我有一个小小的.htaccess文件: RewriteEngine on RewriteRule ^(.*)$ urlroute.php?q=$1 [E=myvariable:'withthisvalue',B,QSA] 将所有请求定向到我的URL路由脚本。它工作得很好,我可以通过$\u GET['q']访问urlroute.php中请求的URL 我正在使用mod_rewrite设置环境变量myvariable 我可以作为$\u服务器['myvariable']在urlroute.php中访问

我有一个小小的.htaccess文件:

RewriteEngine on
RewriteRule ^(.*)$ urlroute.php?q=$1 [E=myvariable:'withthisvalue',B,QSA]
将所有请求定向到我的URL路由脚本。它工作得很好,我可以通过
$\u GET['q']
访问urlroute.php中请求的URL

我正在使用mod_rewrite设置环境变量
myvariable
我可以作为
$\u服务器['myvariable']
在urlroute.php中访问它。我无法使用
$\u ENV['myvariable']
访问它,这似乎很奇怪。有人能解释一下原因吗

据我所知,在执行重定向时,mod_redirect会在
redirect_uu
前面加上环境变量名(在我的例子中总是这样)。但对我来说,
$\u服务器['myvariable']
$\u服务器['REDIRECT\u myvariable']
都可用,并设置为相同的内容。为什么?

另请参见讨论相同的功能。重写引擎在评估
.htaccess
文件时循环。在每个循环开始时,引擎将所有环境变量复制到副本重定向中。因此,如果解析
.htaccess
文件需要3个循环,那么您还将得到重定向\u重定向*文件,依此类推

Apache 2.3包含一个新的
[E]
标志,但您可以使用此功能在早期版本中实现相同的功能:

RewriteCond %{ENV:REDIRECT_END} =1
RewriteRule ^   -  [L]   

# other rules

...

RewriteRule somepattern  somesubst   [L,E=END:1]
顺便说一句,这些变量将在服务器上下文中可用,但它们是否在环境中可用取决于PHP的实现方式,例如Apache+mod_PHP、Apache+mod_suphp、Apache+mod_fcgi、IIS,

另请参见讨论相同的功能。重写引擎在评估
.htaccess
文件时循环。在每个循环开始时,引擎将所有环境变量复制到副本重定向中。因此,如果解析
.htaccess
文件需要3个循环,那么您还将得到重定向\u重定向*文件,依此类推

Apache 2.3包含一个新的
[E]
标志,但您可以使用此功能在早期版本中实现相同的功能:

RewriteCond %{ENV:REDIRECT_END} =1
RewriteRule ^   -  [L]   

# other rules

...

RewriteRule somepattern  somesubst   [L,E=END:1]

好的,这些变量在服务器上下文中可用,但它们在环境中是否可用取决于PHP的实现方式,例如Apache+mod_PHP、Apache+mod_suphp、Apache+mod_fcgi、IIS等,然而,我认为你的意思是
RewriteCond
而不是
RedirectCond
@anubhava,这就是我所说的“头脑放屁”。很抱歉你当然是对的。我将答案+1编辑为好答案,但我认为你的意思是
RewriteCond
,而不是
RedirectCond
@anubhava,这就是我所说的“头脑放屁”。很抱歉你当然是对的。我已经编辑了答案