2009-08-20 51 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