mod_rewrite如果为空则忽略变量

时间:2012-06-22 10:01:37

标签: php .htaccess mod-rewrite

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

    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重写来读取所需内容,并在这种情况下忽略cid和cname。

3 个答案:

答案 0 :(得分:3)

我想为你提供一个替代方案..

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

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

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

答案 1 :(得分:0)

在mod_rewrite中没有一种超可靠的方法。

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

主要有两种方法:

  • 其中一个是Evert提到将所有内容重定向到相关页面并从那里解密网址,这是最常做的事情

  • 二,检测你收到的$ _GET变量的数量,并判断页面应如何对PHP中的内容作出反应。

你问的不是很直接,也不是非常快速的正则表达式,所以我建议把这个句子打到PHP而不是试图让正则表达式为你做。

答案 2 :(得分:0)

如果您确定永远不会获得catalogue/catid/pagenumber之类的链接,为什么不使用两条规则?

RewriteRule ^([^/]*)/([^/]*)$ index.php?p=$1&page=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)/([^/]*)$ index.php?p=$1&cid=$2&cname=$3&page=$4 [L]