这是一个复杂的问题,我希望有一个简单的答案......
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
获取值如下:
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
RewriteCond
您可以通过将正则表达式拆分为 a和 a来使可能的反向引用数量加倍RewriteRule
。根据您的示例,这看起来如下所示:
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]
是的,我知道,这不是最优雅的解决方案,但它应该有效。您可能需要根据您的具体设置进行一些调整PATH_INFO
(例如切换到或类似操作)。REQUEST_URI
答案2
也许你可以在 RewriteRule 之后使用像 'next|N'(下一轮)这样的标志来重新运行该过程,并使用可用的中断条件来避免无限循环
看这里:http://askapache.info/trunk/mod/mod_rewrite.html#rewriterule
我还没有尝试过,但也许可以