我有一个很奇怪的谜。我有一个相当简单的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。非常感谢任何帮助。
答案 0 :(得分:3)
您需要在重写规则中传递原始查询字符串:
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]
^^^
这样,无论您将来可能添加的新值如何,旧的值也会被传递。