覆蓋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
目錄是永遠存在的。
覆蓋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
目錄是永遠存在的。
請勿使用$ _GET來檢索uri參數 - .htaccess規則不會覆蓋呈現給腳本的URI,因此您可以通過解析$_SERVER['REQUEST_URI']
來檢索URI的「ab」部分。
我見過幾個PHP應用程序 - 比如Joomla!和Magento--其.htaccess文件只是將所有內容重定向到「index.php」,並將其留給PHP路由代碼將URI翻譯爲要顯示的頁面。
在你的情況$_GET['uri']
是真的cd
由於?uri=cd
。 ab
是URL的一部分,不是GET查詢的一部分。
我認爲這是因爲您已在RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]
和您訪問的地址(http://localhost/ub/ab?uri=cd
)中定義了uri=
GET查詢參數。它被第二個覆蓋。
看:
http://localhost/ub/ab?uri=cd
(查詢字符串是?uri=cd
)index.php
和uri
GET參數追加URL到它(>index.php?uri=ub/ab
)index.php?uri=ub/ab&uri=cd
因此uri=
在最終請求中放置了兩次,並被第二個覆蓋。
只需重命名其中一個GET uri
參數。
哦,對不起,我忘了提,那。htaccess文件在'ub' drectory中,ab不是一個目錄 –
看起來修改的答案 –
ya,我明白了,但現在我更喜歡解析'$ _SERVER ['REQUEST_URI']'就像Brilliand的答案。標準是更好的想法。 謝謝 –
有你的重寫規則這樣忽略/覆蓋之前查詢字符串:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?uri=$1 [L]
URI實際上是'/ UB/ab'因此重寫規則可以被修改,以參加查詢參數'UB/ab'。這足夠了嗎?還是隻想返回URI的最後部分? – anubhava