nginx location 与 $request_uri 的匹配区别

举例  http://www.jastme.org/Handler/FileHandler.ashx?fid=207ec068-2571-404d-84cd-f4c2a475865f_152X152_1

我现在有这样一个需求

把http://www.jastme.org/Handler/FileHandler.ashx?fid=207ec068-2571-404d-84cd-f4c2a475865f_152X152_1

在nginx中重写成

http://www.jastme.org/Handler/FileHandler.ashx?fid=207ec068-2571-404d-84cd-f4c2a475865f_152X152


代码   错误示范

 location ~* /Handler/FileHandler\.ashx?([^_]+)(_[0-9]+)$ {
		set $m1 $1;
		rewrite  ^/(.*)$  /\1?$m1;
	}

这个为什么是错误的呢?

因为location只能匹配uri  不能匹配参数

大概意思     uri    

www.jastme.org/Handler/FileHandler.ashx?

参数

fid=207ec068-2571-404d-84cd-f4c2a475865f_152X152_1

就是这样  后面的这段在location中是不能匹配的,所以不管怎么写 都不会成功的,因为location的规则就不会生效



正确代码

        location ~*/Handler/FileHandler\.ashx?
        {
                if ($request_uri ~* ^/Handler/FileHandler.ashx\?([^_]+)(_[0-9]+)$) {
                set $m1 $1;
                rewrite ^/Handler/FileHandler.ashx /Handler/FileHandler.ashx?$m1? permanent;}

只有使用$request_uri 才能获取完整的链接

转载于:https://my.oschina.net/jastme/blog/528541

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值