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

标签 php mod-rewrite

我有这个小 .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/

相关文章:

php - 检查购物车中是否包含多个强制产品类别之一

.htaccess - mod_rewrite 建议

apache - 使用 .htaccess 匹配重写规则中的问号

.htaccess - 如何在 https 站点中的特定文件夹上强制使用 http

mod-rewrite - Google 301 重定向似乎不起作用

php - 如果 install.php 存在,则访问 install.php,否则访问 index.php

php - mcrypt_encrypt 到 openssl_encrypt 和 OPENSSL_ZERO_PADDING 问题

php - 如果 END 之前没有未结束的 START,那么替换/删除 END 的正则表达式是什么?

PHP:strtotime 为 future 日期返回 false?

java - 为什么通常不允许嵌套 block 注释?