0

我的查询是关于创建一个正则表达式来捕获:

  1. 0 个或更多子类别
  2. 0 或 1 分页索引
  3. 0 或 1 个产品 ID

这可以通过将所有内容作为单个参数读取并将此参数传递给 php 来轻松完成,但是这将意味着大量代码和性能损失,而 htaccess+regex 将使用一行代码完成此操作。

例子:

catalog/
显示从第 0 页开始的所有产品

catalog/dolls/barbie/malibu/
显示从第 0 页开始的所有 malibu 芭比娃娃

catalog/dolls/gijoe/p_5/id_99
显示产品 id_99。然而,页面和类别被维护为显示为导航链接。

目录/娃娃/p_3
目录/娃娃/芭比娃娃/id_456

RewriteRule ^catalog/(([^/:*?"<>|\r\n]*/)*)(id-([0-9]{1,4}+))*$ catalog.php?category=$1&id=$3

我试过像这样的目录/娃娃/芭比娃娃/id-1234/这样的网址;但是捕获 1 美元会产生 doll/barbie/id-1234/ 和 id-1234/id-345/id-145/ 之类的东西将是“有效”返回 145,因此会损害 seo 放置重复页面,这个正则表达式甚至不处理分页...我使用 RegexBuddy3(非常有用,必须购买),但 apache+httacess 在处理超长表达式时的行为并非 100% 相同。

4

1 回答 1

0

最简单的方法是在 URL 中传递类别和产品的 id 您可以使 URL 看起来像这样
catalog/dolls-12/ - 您现在在目录中查找类别 id 12
catalog/dolls/barbie /malibu-33/ - 您现在在目录中查找类别 id 33
目录/dolls/barbie/malibu-33/barbie-450 - 您现在正在目录中查找类别 id 33 和产品 450

这应该通过 htaccess 中的 3 条规则来完成。如果您收到一个看起来像
catalogue/(.*)-number/(.*)-number 的链接,那么您正在查看某个类别中的产品。
catalogue/(.*)-number 那么你正在查看一个分类
目录/ - 你正在查看整个目录。

You do not need to capture everything, just the numbers, those will already tell you where you are.

于 2012-12-20T04:29:41.013 回答