ModRewrite 9 反向引用限制

ModRewrite 9 反向引用限制

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

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

我还没有尝试过,但也许可以

相关内容