nginx有10个以上参数rewrite的处理

原创
2015/05/21 11:17
阅读数 62
1.给匹配结果加个名字,按名字访问
写法:(?<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后,得最终结果
}



3.
 获取 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;



nginx找个时间系统的看本书!



展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部