2012-10-13 51 views
25

我想mod_rewrite一個URL到另一個頁面,但我也想要添加任何查詢字符串保留。我該如何mod_rewrite並保留查詢字符串?

RewriteEngine On 

#enforce trailing slashes 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_URI} !# 
RewriteCond %{REQUEST_URI} !(.*)/$ 
RewriteRule ^(.*)$ http://localhost/siteroot/$1/ [L,R=301] 

RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1 

因此,如果用戶訪問apps/app1/index.php?app=app1所示。 但是,我希望能夠保留可選的查詢字符串,以便訪問apps/app1/?variable=x返回index.php?app=app1&variable=x

什麼mod_rewrite規則/條件會使這種情況發生?

回答

49

您需要添加[QSA] flag(「查詢字符串附加」)

RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1 [L,QSA] 

對於301頁面重定向與[R]標誌,而不是像這樣一個內部重寫,查詢字符串會自動添加。但是,您必須強制使用[QSA]進行內部重寫。

+0

謝謝,我沒有意識到這很簡單。 –

+1

+1同意@DanielOakey ..我試圖用正則表達式來破解一些東西,但它不工作.. –

+2

澄清,這不是關於重寫與重定向。 http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa說: 當替換URI包含查詢字符串時,RewriteRule的默認行爲是放棄現有的查詢字符串,並將其替換與新生成的一個。使用[QSA]標誌會導致查詢字符串被合併。 –

相關問題