2009-11-06 73 views
1

我有一套相當複雜的重寫規則,爲我的網站頁面提供了相當多的URL。眼下對付搜索結果的分頁我用2個重寫規則:Mod重寫可選參數

RewriteRule ^search/([0-9]+)$ /cgi-bin/search.pl?page=$1 [NC,L,QSA] 
RewriteRule ^search$ /cgi-bin/search.pl [NC,L,QSA] 

這些處理的URL,例如:

http://example.com/search 
http://example.com/search/2 
http://example.com/search/1000 

我不知道如何將這些合併成1條重寫規則,以便search.pl腳本被正確調用,並且只有在指定頁面時才傳遞頁面參數。我知道這是一個非常基本的問題,但我似乎無法在任何地方找到答案。謝謝你的幫助!

+0

看起來像前幾個答案在錯誤的方向會一點點。我正在考慮更多的重做正則表達式,以便頁面參數是可選的。可能類似於: RewriteRule^search(/([0-9] +))?$ /cgi-bin/search.pl?page=$1 [NC,L,QSA] 但它需要實際工作。 – 2009-11-06 15:58:34

+0

@Russell C .:用'$ 2'替換'$ 1',因爲您想要第二個括號組的匹配。 – Gumbo 2009-11-06 16:03:53

+0

對URL進行了兩個獨立的更改 - (1)轉到cgi-bin/search.pl,(2)如果有頁碼,則將其作爲參數傳遞。這是合乎邏輯的,因爲它是兩個RewriteRules。你爲什麼想要成爲一個? – 2009-11-06 22:00:40

回答

1

你可以做這樣的事情:

RewriteCond page=$2 ^page=.+| 
RewriteRule ^search(/([0-9]+))?$ /cgi-bin/search.pl?%0 [NC,L,QSA] 

但是,這並不是真正的漂亮,是嗎?


編輯或者,如果你很好用空頁值:

RewriteRule ^search(/([0-9]+))?$ /cgi-bin/search.pl?page=$2 [NC,L,QSA] 
+0

不幸的不是。 – 2009-11-06 15:56:25

+0

它是第二個。奇蹟般有效。感謝Gumbo! – 2009-11-06 22:03:34

+0

謝謝@Gumbo,這對我也有幫助! – 2012-04-17 05:48:37

0

可能使用rewritemap與一個小的外部腳本映射非空?page=$1和空爲空。我會建議堅持你有什麼。