rewrite规则中参数多于9个的处理方式 apache nginx

RewriteRule ^index-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)(.*)$ $9&&a=$1&a2=$2&a3=$3&a4=$4&a5=$5&a6=$6&a7=$7&a8=$8 [C,NC]

----第一部分
RewriteRule ^-([0-9]+)-([0-9]+).html&&(.*) index.php?$3&a9=$1&a10=$2 [QSA,L,NC]

----第二部分

可见10个参数被分成了两条紧密相连的规则最终把静态地址1指向了动态地址2,为什么不能写成一条呢,因为apache rewrite不支持超过9个参数。注意,后面的[C,NC] 相当于修正符,C代表规则链条(chain)未结束,需要拼接下一条规则 L(last) 说明规则结束。需要指出的是“$9&&” ,意思是把第9个括号匹配到的内容(即剩下的2个参数值)连同已经匹配到的8个参数值作为第二条规则的被匹配的对象。

rewrite ^/index-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-([0-9]+)-(?P<f>[0-9]+)(.*).html /index.php?a=$1&a2=$2&a3=$3&a4=$4&a5=$5&a6=$6&a7=$7&a8=$8&a9=$9&a10=$f last;

 注意第10个参数f 通过?P<f>重命名为f ,当然也可以是其他名字,$f也要改成一致的就行了,如果有第11个参数o3,则在f?(?P<f>[0-9,]*)后面添加o?(?P<j>d*)即可,对应的a10=$f 后面也要加&a11=$j。nginx 没有类似于apache 的修正符。

原文地址:https://www.cnblogs.com/yangcclg/p/6184042.html