2009-10-23 63 views
0

我有一些舊產品頁面顯示搜索重新設計的網站。mod_rewrite爲特定的動態頁面

舊的頁面是這樣的: www.site.com/mycart/index.php?act=viewProd &的productId = 34

我有,我想這些去靜態頁面。

,所以我想

重定向301 /mycart/index.php?act=viewProd &的productId = 34 http://www.site.com/prod-name1

我知道我不能用 「301重定向」,因爲它是不是這樣做靜態頁面。

我想知道處理此問題的最佳方法。

因爲舊結構和新頁面之間沒有關聯,所以每個重定向都需要一個規則。

纔有可能,也許只是匹配的productId = 34

重寫規則[URL包含productId參數= 34] http://www.site.com/prod-name1? [R = 301,L]

如果這將是一個有效的解決方案,我將如何去匹配「productId = 34」。

任何幫助,將不勝感激。

+0

你打算如何使mod_rewrite理解哪些產品id與每個產品名稱相關? – yoda 2009-10-23 16:38:13

+0

該部分已在CMS內處理。 這是一個不同的購物車解決方案,我想從舊CMS重定向到新CMS的相應頁面。 所以要說清楚,我只想知道如何去做我上面提到的。進入www.site.com/prod-name1後會發生什麼情況已由CMS處理。 – merlincam 2009-10-23 18:06:01

回答

1

您需要使用RewriteCond測試查詢:

RewriteCond %{QUERY_STRING} ^(&[^&]*)*productId=34(&|$) 
RewriteRule ^mycart/index\.php$ /prod-name1? [L,R=301] 

^(&[^&]*)*之前和(&|$)productId=34後僅僅只改寫如果productId=34是一個完整的URL參數,不僅是productId=34567foobarproductId=34之一的一部分。

+0

我結束了使用這個(在我看到您的答案之前): RewriteCond%{QUERY_STRING}。* productId = 34. * RewriteRule(。*)http://www.site.com/view/product-name? 我覺得你的解決方案更強大,也許稍微更正確。 – merlincam 2009-10-23 19:10:44

0

爲什麼你不想在這種情況下使用301?這裏有一個關於changing dynamic URLs to static URLs的教程。如果您真的重定向到靜態頁面,則需要外部重定向。如果你保留你的PHP文件,並且想在它前面放一個漂亮的URL,你想做一個內部重寫,也就是說當請求進入/ prod-name-1時,將它內部路由到/ mycart/index .PHP的productId = 34,但不發送301

+0

請重新閱讀以上評論。我確實想使用301重定向。 我寧願只使用重定向301 oldpage http://www.newsite.com/product-name 但不幸的是,舊的購物車結構得到了動態頁面索引?標記在網址中,而Apache重定向不會處理這些。 – merlincam 2009-10-23 18:07:51