nginx location 与 $request_uri 的匹配区别
博客专区 > jastme 的博客 > 博客详情
nginx location 与 $request_uri 的匹配区别
jastme 发表于2年前
nginx location 与 $request_uri 的匹配区别
  • 发表于 2年前
  • 阅读 6530
  • 收藏 3
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 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 才能获取完整的链接

共有 人打赏支持
粉丝 36
博文 122
码字总数 59358
×
jastme
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: