2013-01-10 61 views
1

我有一個CMS系統,可以將醜陋的URL轉換爲更友好的URL。IIRF/APACHE重寫條件失敗,查詢字符串

到目前爲止instanstance,而不是頁面的URL是這樣的:

/pagebase.php?id=3644 

,我爲每個頁面的URL寫設置,使其更加友好。

例如:

RewriteRule ^/events$ /pagebase.php?id=3644 [I] 

所以當domain.com/events用戶鍵入他們拉起上方網址。

這適用於幾乎所有的頁面,除了這個我需要添加額外的查詢字符串,所以我可以做這樣的事情。

www.domain.com/events?y=2010=&m=&1d=2 

這將改寫爲

www.domain.com/pagebase.php?id=3366&y=2010=&m=&1d=2. 

唯一的問題是url寫匹配失敗,因爲它沒有看到?Y = 2010 = & M = & 1D = 2作爲查詢字符串,它將其視爲網址的一部分並失敗。

我需要修改我的重寫文件以允許查詢字符串通過。

我要像做 重寫規則^ /事件 - %QUERYSTRING%$ /pagebase.php?id=3644 +%QUERYSTRING%[I]

凡從比賽中刪除的查詢字符串,但隨後將其附加到書寫的網址的末尾。我只是沒有足夠的知識來了解如何重寫url。

這是我的重寫文件的一個例子。

RewriteRule ^/events$ /pagebase.php?id=3644 
RewriteRule ^/faqs$ /pagebase.php?id=3659 
RewriteRule ^/gallery$ /pagebase.php?id=3645 
RewriteRule ^/gifts$ /pagebase.php?id=3646 

我需要的東西,將所有頁面上工作,我不希望有修改每一個規則來處理特定的查詢字符串,我只想要一個通用的解決方案,將通過傳遞查詢字符串。

+0

追加[L,QSA]將重寫規則語句。 「L」是說最後(不要繼續重寫),而「QSA」是查詢字符串追加以將參數添加到您的URL –

+0

這似乎並不奏效。它看起來如何?像這樣RewriteRule ^/events $ /pagebase.php?id=3644 [L,QSA] – matwonk

+0

我發現將查詢字符串與QSA結合可能會出現問題。 我認爲這可以做到這一點:'RewriteRule ^/events $ /pagebase.php?id=3644&%{QUERY_STRING} [L]' –

回答

1

您可以嘗試匹配一個可選的查詢字符串,並經該[QSA]修改附加:

RewriteRule ^/events(\?.*)?$ /pagebase.php?id=3644 [QSA,L] 
RewriteRule ^/faqs(\?.*)?$  /pagebase.php?id=3659 [QSA,L] 
RewriteRule ^/gallery(\?.*)?$ /pagebase.php?id=3645 [QSA,L] 
RewriteRule ^/gifts(\?.*)?$ /pagebase.php?id=3646 [QSA,L]