这是一个复杂的问题,我希望有一个简单的答案......
RewriteRule ^category/([^.]+)/([0-9]+)/([^.]+)/([0-9]+) category.php?c_id=$2&filters=$3&_p=$4&name=$1
此规则将选择 category/kitchen/10/0-0-0-0-0-0-0-0/1
使用以下获取 val:
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 都是一个 get 变量。所以我可以得到
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
任何想法?
提前致谢!
RewriteCond
您可以通过在 a和 a之间拆分正则表达式来使可能的反向引用数量增加一倍RewriteRule
。根据您的示例,这将类似于以下内容:是的,我知道,这不是最优雅的解决方案,但它应该可以工作。根据您的具体设置,您可能需要稍微玩一下
PATH_INFO
(例如切换到或类似的东西)。REQUEST_URI
也许您可以在 RewriteRule 之后使用像 'next|N' (下一轮)这样的标志来使用可用的中断条件重新运行进程以避免无限循环
见这里:http ://askapache.info/trunk/mod/mod_rewrite.html#rewriterule
我还没有尝试过,但它可能是可能的