.htaccess排序和名称冲突

时间:2012-03-04 14:52:46

标签: php mysql apache .htaccess mod-rewrite

我有不同的网址(在.htaccess中设置),现在我想为它添加更多功能。

例如:

  • /部分/
  • /部分/ 1 /
  • /部分/ 3 /名称/

这将显示使用默认排序的部分页面(项目列表),第二个是页码,第三个和第四个是排序依据和排序依据。在这种情况下,默认情况下按名称desc排序。

现在,我也想要:

  • /部分/
  • /部分/ 1 /
  • /部分/ 3 /产物

这是部分,产品ID和产品名称(因此我可以通过id查询效率)

我到目前为止:

RewriteEngine On
RewriteRule ^([^/]+)$ index.php?section=$1
RewriteRule ^([^/]+)/([0-9]+)$ index.php?section=$1&pagenum=$2
RewriteRule ^([^/]+)/([0-9]+)/([^/]+)$ index.php?section=$1&pagenum=$2&orderby$3

这适用于一个但不是两个,任何建议?

1 个答案:

答案 0 :(得分:4)

以下是您可以做的事情:

RewriteEngine On
RewriteBase /

您可以将其用作常用功能:

RewriteRule ^([^/]+)$ index.php?section=$1 [L,NC]
RewriteRule ^([^/]+)/([0-9]+)$ index.php?section=$1&pagenum=$2 [L,NC]

默认情况下,您不希望显示没有名称的产品(假设您需要SEO网址)

现在针对特定页面:

RewriteRule ^([a-z0-9\-]+)/([0-9]+)/([a-z0-9\-]+)/?$ product.php?section=$1&id=$2&name=$3 [L,NC]

请注意此处的文件名。因为如果你有3个元素(section / id / name)意味着你想要显示一个产品。

现在,列表/订单具体

RewriteRule ^([a-z0-9\-]+)/([0-9]+)/([a-z0-9\-]+)/(asc|desc)/?$ list.php?section=$1&pagenum=$2&sortcolumn=$3&orderby=$4 [L,NC]

另请注意此处的文件名。如果在URL的末尾添加desc或asc,则表示您将显示产品列表。最后一个参数将允许在产品和产品列表之间切换。当然,您必须始终使用ascdesc关键字。您可以使用的另一种方法是使用单词list或任何其他相关名称来显示列表示例:

RewriteRule ^list/([a-z0-9\-]+)/([0-9]+)/([a-z0-9\-]+)/(asc|desc)?$ list.php?section=$1&pagenum=$2&sortcolumn=$3&orderby=$4 [L,NC]

在这种情况下,所有以list开头的规则都会显示产品列表而不是产品本身