写法:(?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
rewrite ^/resume(\d)?(t(\d*))?(c(\d*))?(p([0-4]))?(v([0-1]))?/(?<resId>\d+)\.html$ /search/lib/result.xhtml?presentStatus=$1&licenceType=$3&nowPC=$5&t=$7&isVal=$9&resId=$resId break;
所以:把第10个参数最后用名字访问,结果是OK的,
2.把重写语句拆成多个,参考别人的,没测试过
location /
{
if (!-e $request_filename)//若访问的地址不是确切存在的某文件,则执行里面的重写规则
{
rewrite ^/(.)(.)(.)(.)(.)(.)(.)(.)(.*)$ /tempkey0/a=$1&b=$2&c=$3&d=$4&e=$5&f=$6&g=$7&h=$8&tempkey1=$9;
//第一条重写语句:将前八个先重写,然后将后面的全打包,放在tempkey1里面,同时将所有的重写语句打包在tempkey0里
}
rewrite ^/tempkey0/(.*?)&tempkey1=(.)(.)(.)$ /test.php?$1&i=$2&j=$3&k=$4;
//第二条重写语句:获取tempkey0,得知需要重写,将前八个打包放在$1里,然后从tempkey1里匹配出从第九个开始的字符,放在$2开始的组里。最后将获得的参数加在test.php后,得最终结果
}
获取 http://www.jms.com/wk/jack-tom-4-5-6-7-8-9-jack.html 第10位的参数“jack”是name的值。如何获取到值jack呢。
在apache下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(.*) $1/$9 [C,NC]
RewriteRule ^(.*)/(\w+)-(\w+).html $1/p.php?name=$3 [L]
</IfModule>
在nginx下rewrite可以写成:
rewrite ^(.*)/(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(\w+)-(.*) $1/$9 ;
rewrite ^(.*)/(\w+)-(\w+).html $1/p.php?name=$3 last;