2013-04-10 44 views
4

我不明白爲什麼我總是有重寫規則這樣一個巨大的問題,但我只是想追加到查詢字符串,如果它存在並添加一個?,如果它不。實際上,我並不在乎網址是否在瀏覽器中更改 - 它只需加載正確的目標網頁。重寫爲追加到查詢字符串

RewriteRule /cia16(.*)\?(.*) /cia$1?$2&CIA=16 
RewriteRule /cia16(.*) /cia/$1?CIA=16 

如果我去/cia16/steps.php?page=1它實際上被改寫爲/cia/steps.php?CIA=16 - 這是它似乎接受查詢字符串部分甚至沒有考慮的URL重寫的目標的一部分。

我需要做些什麼才能使重寫與現有的查詢字符串正常工作?

回答

7

您無法匹配RewriteRule內的查詢字符串,您需要匹配RewriteCond中的%{QUERY_STRING}變量。但是,如果你想只追加查詢字符串,你可以只使用QSA標誌:

RewriteRule /cia16(.*) /cia/$1?CIA=16 [QSA] 

的URI:/cia16/steps.php?page=1將得到改寫爲/cia/steps.php?CIA=16&page=1。如果由於某種原因,你需要的page=1之前CIA=16,那麼你可以做這樣的事情:

RewriteRule /cia16(.*) /cia/$1?%{QUERY_STRING}&CIA=16 
+0

'[QSA]'不正是我需要的...即使語法是坦率地奇 – 2013-04-11 14:09:41

+0

如果在重定向之前沒有查詢字符串到初始url,此解決方案將返回?&CIA = 16。任何提示,以避免這一點? – 2016-06-15 05:19:19