我有一个.htaccess小文件:
RewriteEngine on
RewriteRule ^(.*)$ urlroute.php?q=$1 [E=myvariable:'withthisvalue',B,QSA]
将所有请求定向到我的URL路由脚本。它工作得很好,我可以访问urlroute.php中请求的URL作为$_GET['q']
。
我正在使用mod_rewrite设置环境变量myvariable
我可以在urlroute.php中以$_SERVER['myvariable']
的形式访问它。我无法使用$_ENV['myvariable']
访问它,这似乎很奇怪。有人能解释一下原因吗?
据我所知,在进行重定向时,mod_redirect会在环境变量名前面加上REDIRECT_
(在我的情况下总是这样)。但对我来说,$_SERVER['myvariable']
和$_SERVER['REDIRECT_myvariable']
都可用并设置为相同的内容。为什么?
请参阅本文也讨论了相同的功能。重写引擎在每个循环开始时循环评估.htaccess
文件—引擎将任何环境变量复制到副本中REDIRECT_*。因此,如果.htaccess
文件的解析需要3个循环,那么您还将获得REDIRECT_REDIRECT_*文件,依此类推
Apache2.3包含了一个新的[E]
标志,但您可以在早期版本中使用此功能来实现相同的功能:
RewriteCond %{ENV:REDIRECT_END} =1
RewriteRule ^ - [L]
# other rules
...
RewriteRule somepattern somesubst [L,E=END:1]
AFAIK,这些变量将在SERVER上下文中可用,但它们是否在环境中可用取决于PHP的实现方式,例如Apache+mod_PHP、Apache+mod_suphp、Apache+mod_fcgi、IIS。。。