2012-06-22 49 views
0

好吧,我有一個項目,有產品類別的列表,但也列出所有產品。我爲它創建了一個分頁,這很好。我設置了mod_rewrite來處理分類上的分頁,但我無法設置所有產品。工作之一是www.domain.com/catalogue/catid/catname/pagenumber,我也想使www.domain.com/catalogue/pagenumber,但mod重寫在這裏出現問題。mod_rewrite如果空的話忽略變量

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)$ index.php?p=$1&cid=$2&cname=$3&page=$4 [L] 

當我嘗試撥打第二個鏈接時,他將該頁碼視爲cid。所以我想設置mod重寫來讀取需要的內容,並在這種情況下忽略cid和cname。

回答

3

我想給你這個替代..

而不是使用正則表達式,你似乎有一點問題與仍然..有一個更容易的方式。

如果你重定向一切到index.php,沒有例外。 然後指數PHP中,你可以閱讀使用$ _ SERVER [「REQUEST_URI」]當前URL,它變得非常容易explode('/', $url);「做這一切的處理..

這是一種更自然的方式做路由。

0

在mod_rewrite中沒有一種超可靠的方法來做到這一點。

最可靠的方法是檢查這在PHP中。

主要有兩種方法:

  • 一個作爲埃弗特提到所有從那裏重定向到相關頁面,並破譯URL,這是大多數做

  • 兩個檢測量$ _GET會影響您收到並判斷頁面應該如何對PHP中的內容做出反應。

你問什麼也不是很簡單的,也不是非常快的正則表達式,所以我會建議打耳光這一條款在PHP,而不是試圖讓正則表達式來爲你做它。

+0

我只是在不改寫它的情況下做分頁老式的方法。感謝您的回答。 – Kristijan

+0

是最好的選擇,儘管對於SEO友好的URL我建議與Everts的建議。這是所有框架都使用wordpress,yii和codeigniter等等,所以它是一個堅實的方法,並且經過很好的驗證。 – Sammaye

0

爲什麼不使用兩個規則,如果你確定你永遠不會得到像catalogue/catid/pagenumber這樣的鏈接?

RewriteRule ^([^/]*)/([^/]*)$ index.php?p=$1&page=$2 [L] 
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1&cid=$2&cname=$3&page=$4 [L]