Apache Rewrite打破了PHP SuperGlobals

时间:2012-05-08 00:50:49

标签: php apache mod-rewrite

我有一个很奇怪的谜。我有一个相当简单的Apache Rewrite,由于一些奇怪的原因它搞砸了我的php Superglobals。首先关闭重写如下:

<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超全局,其中key:item,value:id。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

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

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

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