ModRewrite 9返回参考限制

这是一个复杂的,我希望有一个简单的答案…

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

与下面的瓦尔:

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

filter存储在0-0-0-0-0-0-0-0的原因是由于9回参考限制。 每个0都是一个不同的filtervariables,我通过在$ _GET ['filter']上进行拆分来访问。

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

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

注意到[R = 301,L],所以它变成了301redirect。

这一切都很好,但我想知道是否有一个巧妙的方式分裂0-0-0-0-0-0-0-0,使每个0是一个variables。 所以我可以得到

 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 

任何想法?

提前致谢!

您可以通过分割RewriteCondRewriteRule之间的正则expression式来增加可能的反向引用的数量。 根据你的例子,这看起来像下面这样:

 RewriteCond %{PATH_INFO} ^category/[^.]+/[0-9]+/([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&_p=$3&name=$1 [R=301,L] 

是的,我知道,这不是最优雅的解决scheme,但它应该工作。 您可能需要使用PATH_INFO (例如,切换到REQUEST_URI或类似的),根据您的确切设置玩一下。

也许你可以在RewriteRule之后使用像'next | N'(下一轮)之类的标志来重新运行一个可用的中断条件的进程,以避免无限循环

看到这里: http : //askapache.info/trunk/mod/mod_rewrite.html#rewriterule

我还没有尝试过,但它可能是可能的