0

好的,所以我有一个按类别列出产品的项目,但也列出了所有产品。我为它创建了一个分页,效果很好。我设置了 mod_rewrite 来处理类别分页,但我无法为所有产品设置它。工作的是www.domain.com/catalogue/catid/catname/pagenumber,我也想制作www.domain.com/catalogue/pagenumber,但是mod rewrite在这里遇到了问题。

    RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?([^/]*)$ index.php?p=$1&cid=$2&cname=$3&page=$4 [L]

当我尝试调用第二个链接时,他将该页码视为 cid。所以我想设置 mod rewrite 来读取需要的内容,在这种情况下忽略 cid 和 cname。

4

3 回答 3

3

我想给你一个替代这个..

而不是使用正则表达式,你似乎仍然有一点问题......有一个更简单的方法。

如果您将所有内容重定向到 index.php,则没有例外。然后在索引 PHP 中,您可以使用 $_SERVER['REQUEST_URI'] 读取当前 url,并且使用 ' 完成所有这些处理变得非常容易explode('/', $url);..

这是一种更自然的路由方式。

于 2012-06-22T10:05:05.933 回答
0

在 mod_rewrite 中没有超可靠的方法可以做到这一点。

最可靠的方法是在 PHP 中进行检查。

主要有两种方法:

  • 正如 Evert 提到的那样,将所有内容重定向到相关页面并从那里破译 url,这是大多数人所做的

  • 第二,检测您收到的 $_GET 变量的数量并判断页面应该如何响应它在 PHP 中获得的内容。

你问的不是很直接,在正则表达式中也不是很快,所以我建议把这个子句放在 PHP 上,而不是试图让正则表达式为你做。

于 2012-06-22T10:09:19.150 回答
0

为什么不使用两个规则,如果你确定你永远不会得到这样的链接catalogue/catid/pagenumber

RewriteRule ^([^/]*)/([^/]*)$ index.php?p=$1&page=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1&cid=$2&cname=$3&page=$4 [L]
于 2012-06-22T16:05:19.317 回答