2009-08-20 98 views
1

我有我應如何構建我的產品列表頁面,頁面的產品,網頁的問題。mod_rewrite的電子商務URL設計

它大致翻譯成這樣:

  1. /bags/nicebag.html = /product.php?product=nicebag&category=bags
  2. /nicebag.html = /product.php?product=nice_bag
  3. /bags = productlisting.php?&category=bags

問題是,網頁將共享相同的URL的結構二號在列表中 /contact.html = page.php?page=contact

爲什麼它沒有在.htaccess上市separatly是網頁可以有不同的名稱的原因。甚至同一頁面可以使用多種語言。

沒有原因。 1和2沒有組合,是否有時我只想參考產品,因爲它可以分爲多個類別。

你的建議是什麼樣的結構?

的.htaccess

# Mod rewrite enabled. 
Options +FollowSymLinks 
RewriteEngine on 

# ---- Rules ---- 

# product.php (Search for category & product name) 
RewriteRule ^([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)\.html?$ product.php?prod_id=$2&cid=$1 [NC,L] 

# productlisting.php (Search for category) 
RewriteRule ^([A-Za-z0-9-_]+)?$ productlisting.php?&cid=$1 [NC,L] 

回答

2

使用不同類型不同的後綴,e.g HTML產品和HTM換頁或類似的東西

/bags/nicebag.html = /product.php?product=nicebag&category=bags 
/nicebag.html = /product.php?product=nice_bag 
/bags = productlisting.php?&category=bags 
/contact.htm = page.php?page=contact 

/contact/page.html = page.php?page=contact 
+0

這也是我的想法,我會一起去的 – Cudos 2009-08-31 13:32:22

+0

歡呼聲,有一個球 – 2009-08-31 19:32:21

0

我在幾個星期前面臨同樣的問題。 結束爲「靜態」頁面定義不同的結構。

www.examples.com/contact/ 或 www.examples.com/info/contact.html

因此,它可以從 「動態」 頁面進行區分。

+0

同樣想法。但是我覺得這樣做很笨拙。但是,也許我必須這樣做:( – Cudos 2009-08-20 09:11:49

0

有幾乎沒有辦法不把在.htaccess非產品網頁名稱或做一些初步的處理在接收PHP www.examples.com/nicebag.html和www.examples.com/contact.html區分腳本。

依我之見,有三種選擇:

  1. 重寫所有請求page.php文件,併爲那些不匹配任何非產品頁面,包括產品腳本

  2. 動態地將非產品頁面名稱寫入.htaccess

  3. 重新考慮非產品頁面的URL結構。也許就像www.example.com/page/contact.html可能會幫到一樣

無論如何,我會去第三個。

4

我會使用路徑前綴/products/,以確定相關的URL的產品。所以:

  • /products/bags/nicebag.html/product.php?product=nicebag&category=bags
  • /products/nicebag.html/product.php?product=nice_bag
  • /products/bags/productlisting.php?&category=bags

在這種結構中,你也可以重寫/products//productlisting.php那則顯示所有產品。

# product listing 
RewriteRule ^products/$ productlisting.php [L] 
RewriteRule ^products/([A-Za-z0-9-_]+])$ productlisting.php?category=$1 [L] 
# product details 
RewriteRule ^products/([A-Za-z0-9-_]+)\.html$ product.php?prod_id=$1 [L] 
RewriteRule ^products/([A-Za-z0-9-_]+)/([A-Za-z0-9-_]+)\.html$ product.php?prod_id=$2&cid=$1 [L] 
# other pages 
RewriteRule ^([A-Za-z0-9-_]+)\.html$ page.php?page=$1 [L] 
+0

這個想法是爲了避免在URL中包含「額外」關鍵字,因爲這可能會對Google的搜索優化帶來一些不可預見的負面影響 – Cudos 2009-08-31 13:37:07

0

我會推薦扁平結構:

  • domain.com/bags
  • domain.com/contact
  • domain.com/nice-bag
2

因爲它在.htaccess文件中維護你的重寫規則會很麻煩和麻煩,我只會把一條規則放在那裏,重寫成如下形式:

/dispatch.php?request=[request] 

例如

RewriteRule ^(.*)$ dispatch.php?request=$1 [L,QSA] 

在dispatch.php,您剖析請求到它的元素(路徑,查詢字符串,錨,...),並決定在哪裏從那裏去。通過這種方式,您可以使用代碼進行決策,這將爲您提供更多的靈活性,而不僅僅是維護大量的自定義重寫映射。

例如,您可以通過查詢數據庫來識別路徑中的產品和類別元素,並以更通用的方式將調度邏輯基於結果。

[Pseudocode] 
if (isProduct($lastPathElement)) { 
    // Maybe verify that leading path elements are categories ... 
    // Other preparations/verifications ... 
    // refer execution to product.php 
} 
elseif (isCategory($lastPathElement)) { 
    // Other preparations/verifications ... 
    // refer execution to productlisting.php 
} 
// ... (Checks for other specific stuff) 
else { 
    // Static page or 404 
    // refer execution to page.php 
} 
+0

這一個非常好!但是我現有的代碼不允許這樣做,我應該先從這個角度設計我的代碼然後 – Cudos 2009-08-31 13:33:49