2012-05-08 21 views
1

我有一個很奇怪的祕密。我有一個相當簡單的Apache重寫,由於一些奇怪的原因,它搞亂了我的PHP Superglobals。第一關重寫如下:Apache重寫突破PHP SuperGlobals

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

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

當這條規則是唯一的超級全局是$ _GET和$ _REQUEST(當然$要求做,因爲這讓他們從$ _GET,...)。無論我在網址中輸入什麼,我都會收到/ 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。任何幫助是極大的讚賞。

回答

3

您需要將原有的查詢字符串在你重寫規則:

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

這樣一來,無論你可能在將來添加新的價值觀,舊的會獲得通過,以及。

+0

現在不工作,我現在得到以下內容: – ars265

+1

沒關係,它確實,對不起,必須重新啓動Apache – ars265

+0

@ ars265好聽! – jeroen