我有这个小 .htaccess 文件:
RewriteEngine on
RewriteRule ^(.*)$ urlroute.php?q=$1 [E=myvariable:'withthisvalue',B,QSA]
将所有请求定向到我的 URL 路由脚本。它工作得很好,我可以在 urlroute.php 中访问请求的 URL $_GET['q']
.
我正在设置环境变量myvariable
使用mod_rewrite
我可以在 urlroute.php 中访问它 $_SERVER['myvariable']
。我无法使用 $_ENV['myvariable']
访问它这看起来很奇怪。有人可以解释一下原因吗?
据我所知,mod_redirect 将在前面加上 REDIRECT_
进行重定向时更改为环境变量名称(在我的情况下总是这样做)。但对我来说$_SERVER['myvariable']
和$_SERVER['REDIRECT_myvariable']
可用并设置为相同的内容。为什么?
最佳答案
参见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、...
关于php - 在 PHP 中使用 mod_rewrite 访问设置的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154695/