使用mod_rewrite时,PHP全局变量不起作用

时间:2012-08-29 23:40:40

标签: php .htaccess mod-rewrite global-variables

  

可能重复:
  global variables in php not working as expected

我有一个在网站的每个页面上运行的php函数,它使用全局变量,例如:

$var = "test";
function test() {
    global $var;
    echo $var;
}

这在直接访问/anyFile.php时工作正常,但网站使用htaccess文件重写网址,例如:

RewriteRule ^action/(.*)$ /index.php?action=$1 [L]

当htaccess重写url时,该函数不起作用,$ var未设置。

可能会发生什么,我该如何解决?(我需要使用“全局”,否则我需要重新编写很多东西。

1 个答案:

答案 0 :(得分:2)

您需要使用[QSA,L]代替[L]

RewriteRule ^action/(.*)$ /index.php?action=$1 [QSA,L]

QSA代表Query String Append,并将查询字符串(网址中?之后的部分)转发给PHP脚本。

顺便说一句,您应该使用register_globals(从PHP 5.3开始,已弃用,从PHP 5.4开始已移除) ,但请改用$_GET superglobal

---编辑---

按照下面的评论(你不能修改.htaccess ),你运气不好。您唯一的解决方案是在请求URI中解析查询字符串,并像使用$_GET超全局一样使用它:

$queryString = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
parse_str($queryString, $query);
echo $query['action'];

我强烈建议您为您修改.htaccess