2012-04-18 48 views
2

我已經經歷了關於mod_rewrite的每一個教程,但我無法弄清楚這一點。重寫搜索結果

我想將www.domain.com/?s=query的搜索網址改寫爲www.domain.com/search/query。 到目前爲止,我成功地實現這個使用這個法則:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /(#[^?&\ ]*)?\?([^&\ ]*&)?s=([^&\ ]+)[^\ ]*\ HTTP/ 
RewriteRule ^$ http://www.domain.com/search/%3? [R=301,L] 

的問題是,一些查詢會導致有幾個搜索結果頁面的女巫都可以訪問通過www.domain.com/?s=query&nggpage=n(其中n是優於2)。

在這種情況下,我想重寫一下,並最終得到如下網址:www.domain.com/search/query/nggpage-n

不太確定該如何實現。我正在尋求幫助的人。

+0

恕我直言,你可以嘗試分裂問題像處理'nggpage'分開並單獨另一種情況。 – g13n 2012-04-18 06:11:06

+0

當你說你想將'www.domain.com/?s = query'重寫爲'www.domain.com/search/query'時,你的意思是如果有人鍵入第一個你希望瀏覽器窗口重定向到第二個,或者你想讓人們輸入第二個,並將其重寫爲第一個? – baynezy 2012-04-18 06:11:25

+0

當有人輸入www.domain.com/?s=query時,他會被重定向到www.domain.com/search/query女巫的內容相同。給定的規則已經做到了,但是當涉及到處理第二個變量(nggpage)時,那是困難的部分。是的@ g13n我已經嘗試過但沒有成功。 – Ace 2012-04-18 06:45:26

回答

2

我認爲你將不得不在多個步驟中分解重寫。事情是這樣做的工作,我簡化了一下您的條件:

  1. 檢查搜索PARAM存在,改寫到目標路徑,並設置env標誌後面的測試

    RewriteCond %{QUERY_STRING} s=([^&\ ]+) 
    RewriteRule ^/?$ /search/%1 [E=redirect:true] 
    
  2. 如果重定向設置和分頁參數是發現,追加了分頁

  3. 的路徑刪除分頁第1頁

    RewriteCond %{ENV:redirect} true 
    RewriteRule ^/(.*)/nggpage-1$ /$1 
    
  4. 如果重定向設置,讓我們重定向

    RewriteCond %{ENV:redirect} true 
    RewriteRule ^/(.*)$ http://www.domain.com/$1? [R=301,L]