-1

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

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

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

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

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

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

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

4

1 回答 1

2

您需要使用[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 superglobals

- - 编辑 - -

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

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

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

于 2012-08-29T23:43:22.817 回答