好的,我有一个项目按类别列出产品,但也列出了所有产品。我为它创建了一个分页,这很好用。我设置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。
答案 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]