2012-12-03 61 views
0

首先,我不熟悉mod重寫,但我有一個我需要重定向的URL。Apache Mod Rewrite保留獲取參數

原始URL是categories.asp?cat1=1&cat2=2&cat3=58&cat4=96

我需要重定向到/store/browse/category/TRADITIONAL-BRIDGE-SINK-MIXER/product-details/1901-Traditional-Bridge-Sink-Mixer-NDSMC

顯然會有很多這樣做,我很願意寫依次在每個規則。

我希望這是有道理的。

在此先感謝。

+1

你的意思是你想保持get參數,同時在內部重寫url?看看QSA標誌。 – arkascha

+0

不保留參數在某種意義上,但 ?cat1 = 1&cat2 = 2&cat3 = 58&cat4 = 96將會轉到一頁 而 ?cat1 = 1&cat2 = 2&cat3 = 58&cat4 = 92將會轉到另一個 – user1463462

回答

0

我想還有更多的事情要做,而不是隻有mod_rewrite。

你首先需要做到這一點:

  • 允許在數據庫中存儲一些URL部分爲每個類別和產品(可能是基於語言)
  • 通過連接顯示了產品網址每個類別的這些URL部分,直至具體的產品
    • 假設該產品的鏈接類別關鍵字將TRADITIONAL-BRIDGE-SINK-MIXER,該產品的關鍵字將1901-Traditional-Bridge-Sink-Mixer-NDSMC
    • 然後,您可以生成此網址:/store/browse/category/TRADITIONAL-BRIDGE-SINK-MIXER/product-details/1901-Traditional-Bridge-Sink-Mixer-NDSMC
  • 然後在.htaccess你會是這樣的:對於類
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^store\/browse\/category\/(.*)\/product-details\/(.*)$ product.php?category_id=$1&product_id=$2 [QSA,L] 

用同樣的方法,可以說一個URL /store/browse/category/SINK-MIXER/TRADITIONAL-BRIDGE-SINK-MIXER/1901-Traditional-Bridge-Sink-Mixer-NDSMC你將不得不如下規則:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^store\/browse\/category\/(.*)\/(.*)\/(.*)$ categories.php?category1_id=$1&category2_id=$2&category3_id=$3 [QSA,L] 

這是不是一個解決方案,這僅僅是一個從...

起點
+0

我希望它會是一個相當簡單的事情。 我不保存細節,因爲這些鏈接來自舊網站,我試圖做的是維護鏈接。 我試過一個301,但是當你使用參數時它會中斷。 – user1463462

+0

如果是這種情況,那麼我會創建一些入口腳本,使用mod_rewrite將任何'/ store/browse/category/*'URL發送到該入口腳本(可以說'old_url_redirect.php'),它將解析該舊URL,獲取所需的數據塊,找到新的URL並將用戶重定向到新的URL ......願上帝與你同在! – shadyyx

+0

嗯,我很樂意這樣做。好想法。 不幸的是,我不能因爲系統使用索引頁面的404錯誤來重定向和建立整個網站。 – user1463462