Mod_Rewrite拆分问题

时间:2009-09-07 15:25:00

标签: php regex apache .htaccess mod-rewrite

这是一个复杂的问题,我希望能有一个简单的答案......

RewriteRule ^category/([^.]+)/([0-9]+)/([^.]+)/([0-9]+) category.php?c_id=$2&filters=$3&_p=$4&name=$1

这个规则将拿起类别/厨房/ 10 / 0-0-0-0-0-0-0-0 / 1

使用以下get vals:

category.php?c_id=10&filters=0-0-0-0-0-0-0-0&_p=1&name=kitchen

过滤器存储在0-0-0-0-0-0-0-0的原因是因为9个反向引用限制。每个0都是一个不同的过滤变量,我通过在$ _GET ['filter']上进行拆分来访问。

我现在将我的URL更改为非mod重写的URL,以便重写规则变为:

RewriteRule ^category/([^.]+)/([0-9]+)/([^.]+)/([0-9]+) category.php?c_id=$2&filters=$3&_p=$4&name=$1 [R=301,L]

注意[R = 301,L]因此它成为301重定向。

这一切都很好,但我想知道是否有一种巧妙的方式将0-0-0-0-0-0-0-0分开,以便每个0都是一个变量。所以我可以得到

category.php?c_id=10&f1=0&f2=0&f3=0&f4=0&f5=0&f6=0&f7=0&f8=0&_p=1&name=kitchen

有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:3)

您可以使用RewriteCond来完成此操作:

RewriteCond $3 ^([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)$
RewriteRule ^category/([^.]+)/([0-9]+)/([^.]+)/([0-9]+) category.php?c_id=$2&f1=%1&f2=%2&f3=%3&f4=%4&f5=%5&f6=%6&f7=%7&f8=%8&f9=%9&_p=$4&name=$1 [R=301,L]