我有这个小.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']
都可用并设置为相同的内容。为什么呢?
答案 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,......