1

我有一个很奇怪的谜团。我有一个相当简单的 Apache Rewrite,出于某种奇怪的原因,它弄乱了我的 php Superglobals。首先Rewrite如下:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

当此规则到位时,唯一的超全局变量是 $_GET 和 $_REQUEST(当然 $REQUEST 会这样做,因为它是从 $_GET,... 获取它们的)。无论我在 URL 中输入什么,我都只会收到 /index_php 作为唯一的键,它没有任何价值。起初我以为我的代码搞砸了,但作为索引文件的第一行,我尝试了以下操作:

foreach($_GET as $key => $value)
{
    echo "$key = $value<br/>";
}
foreach($_POST as $key => $value)
{
    echo "$key = $value<br/>";
}
foreach($_REQUEST as $key => $value)
{
    echo "$key = $value<br/>";
}

唯一打印的是“/index_php =”两次。我之前已经搞砸了几次重写,但显然我做错了。作为旁注,这是我的预期行为:

URL: localhost/users/dashboard?item=id 

这会给我 $_GET 超全局键:项目,值:id。任何帮助是极大的赞赏。

4

1 回答 1

3

您需要在重写规则中传递原始查询字符串:

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

这样,无论您将来可能添加什么新值,旧值也会被传递。

于 2012-05-08T00:52:37.903 回答