我在如何构建产品详情页面,产品页面,网页时遇到问题。
大致转化为:
/bags/nicebag.html
= /product.php?product=nicebag&category=bags
/nicebag.html
= /product.php?product=nice_bag
/bags
= productlisting.php?&category=bags
问题是网页将与列表中的第2个共享相同的URL结构
/contact.html
= page.php?page=contact
它没有单独列在.htaccess中的原因是网页可以有不同的名称。甚至同一页面也可以使用多种语言。
没有的原因。 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]
答案 0 :(得分: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]
答案 1 :(得分:2)
因为在.htaccess文件中维护你的重写规则会很麻烦和麻烦,我只会在其中放一条规则,重写为:
/dispatch.php?request=[request]
e.g。
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
}
答案 2 :(得分:2)
为不同的类型使用不同的后缀,例如产品的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
答案 3 :(得分:0)
www.examples.com/contact/ 要么 www.examples.com/info/contact.html
因此可以将其与“动态”页面区分开来。
答案 4 :(得分:0)
在没有将非产品网页名称放在.htaccess中或在接收php脚本中进行一些初步处理的情况下,几乎没有办法区分www.examples.com/nicebag.html和www.examples.com/contact.html
如我所见,选项包括:
重写对page.php的所有请求以及与任何非产品页面不匹配的请求,包括产品脚本
动态地将非产品页面名称写入.htaccess(凌乱且容易出错)
重新考虑非产品页面的网址结构。也许只有www.example.com/page/contact.html可以提供帮助
无论如何,我会选择第三个。
答案 5 :(得分:0)
我推荐扁平结构: