2012-05-25 118 views
1

覆蓋QSA標誌這是我重寫規則

RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]

當我去這個網址

http://localhost/ub/ab?uri=cd

$_GET['uri']回報cd,而不是ab

如何獲得$_GET['uri']返回ab?或者這是QSA的真實行爲?

感謝,

編輯

.htaccess文件是ub目錄,ab目錄是永遠存在的。

+0

URI實際上是'/ UB/ab'因此重寫規則可以被修改,以參加查詢參數'UB/ab'。這足夠了嗎?還是隻想返回URI的最後部分? – anubhava

回答

2

請勿使用$ _GET來檢索uri參數 - .htaccess規則不會覆蓋呈現給腳本的URI,因此您可以通過解析$_SERVER['REQUEST_URI']來檢索URI的「ab」部分。

我見過幾個PHP應用程序 - 比如Joomla!和Magento--其.htaccess文件只是將所有內容重定向到「index.php」,並將其留給PHP路由代碼將URI翻譯爲要顯示的頁面。

0

在你的情況$_GET['uri']是真的cd由於?uri=cdab是URL的一部分,不是GET查詢的一部分。

我認爲這是因爲您已在RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]和您訪問的地址(http://localhost/ub/ab?uri=cd)中定義了uri= GET查詢參數。它被第二個覆蓋。

看:

  1. 您訪問http://localhost/ub/ab?uri=cd(查詢字符串是?uri=cd
  2. 的mod_rewrite發送到index.phpuri GET參數追加URL到它(>index.php?uri=ub/ab
  3. 然後mod_rewrite的(因附加查詢字符串,所以我們得到index.php?uri=ub/ab&uri=cd

因此uri=在最終請求中放置了兩次,並被第二個覆蓋。

只需重命名其中一個GET uri參數。

+0

哦,對不起,我忘了提,那。htaccess文件在'ub' drectory中,ab不是一個目錄 –

+0

看起來修改的答案 –

+0

ya,我明白了,但現在我更喜歡解析'$ _SERVER ['REQUEST_URI']'就像Brilliand的答案。標準是更好的想法。 謝謝 –

0

有你的重寫規則這樣忽略/覆蓋之前查詢字符串:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.+)$ index.php?uri=$1 [L]