PHP全局变量dos';使用mod_rewrite时无法工作


PHP global variable doesn't work when using mod_rewrite

可能重复:
php中的全局变量未按预期工作

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

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

当直接访问/anyFile.php时,这很好,但网站使用htaccess文件来重写url,类似于:

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

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

会发生什么情况?我该如何解决(我需要使用"global",否则我需要重新编码很多东西。

您需要使用[QSA,L]而不是[L]:

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

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

顺便说一句,您不应该使用register_globals(从PHP 5.3起已弃用从PHP 5.4起已删除),而应该使用$_GET superglobal。

---编辑---

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

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

不过,我强烈建议您为您修改.htaccess