访问在PHP中使用mod_rewrite设置的环境变量

时间:2012-02-06 01:27:07

标签: php mod-rewrite

我有这个小.htaccess文件:

RewriteEngine on
RewriteRule ^(.*)$ urlroute.php?q=$1 [E=myvariable:'withthisvalue',B,QSA]

将所有请求定向到我的URL路由脚本。效果很好,我可以在urlroute.php中以$_GET['q']的形式访问请求的网址。

我正在使用mod_rewrite设置环境变量myvariable 我可以在urlroute.php中以$_SERVER['myvariable']的形式访问它。我无法使用$_ENV['myvariable']访问它,这似乎很奇怪。有人可以解释一下原因是什么吗?

据我所知,mod_redirect会在进行重定向时将REDIRECT_添加到环境变量名称(在我的情况下它总是这​​样做)。但对我来说,$_SERVER['myvariable']$_SERVER['REDIRECT_myvariable']都可用并设置为相同的内容。为什么呢?

1 个答案:

答案 0 :(得分:3)

请参阅this post也讨论了相同的功能。重写引擎在每个周期开始时循环评估.htaccess文件,引擎将任何环境变量复制到副本 REDIRECT _ * 。因此,如果解析.htaccess文件需要3个循环,那么您还将获得 REDIRECT_REDIRECT _ * 文件,依此类推。

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

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

# other rules

...

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

AFAIK,这些变量可用于 SERVER 上下文,但它们是否在 ENVIRONMENT 中可用取决于PHP的实现方式,例如: Apache + mod_php,Apache + mod_suphp,Apache + mod_fcgi,IIS,......