nginx rewrite 的用法

案例:

以前服务器中,图片路径地址如下:

/convention2/upload/image/20160815185505_274_2016-08-15_18-36-13.png

convention2 是以前java web的项目名称

现在服务器迁移到了

http://upload.yhskyc.com/

简单说:

我需要把

http://i.yhskyc.com/convention2/upload/image/2aa.png

映射成为:

http://upload.yhskyc.com:8084/convention2/upload/image/2aa.png

在nginx 配置文件i.yhskyc.com.conf 中添加:

if ( $uri ~* "^/convention./upload/" ) {
                rewrite ^/[^/]+/(.*)$ http://upload.yhskyc.com:8084/convention2/$1 redirect;
        }

解释:

第一行的:"^/convention./upload/" 是正则表达式,比如下面的路径都匹配:

/convention1/upload/image/2aa.png

/convention2/upload/image/2aa.png

/conventiona/upload/image/2aa.png

下面的不匹配:

/convention/upload/image/2aa.png

/convention22/upload/image/2aa.png

第二行的  ^/[^/]+/(.*)$ 也是正则表达式

红色部分匹配"http://i.yhskyc.com/convention2/upload/image/2aa.png"中的

convention2,

绿色部分匹配"http://i.yhskyc.com/convention2/upload/image/2aa.png"中的

upload/image/2aa.png

将替换" http://upload.yhskyc.com:8084/convention2/$1"中的$1,所以得到的结果是:

http://upload.yhskyc.com:8084/convention2/upload/image/2aa.png(这是结果)

使用rewrite ,浏览器地址会跳转,

我们输入的是:http://i.yhskyc.com/convention2/upload/image/2aa.png,

但是浏览器最终会跳转到http://upload.yhskyc.com:8084/convention2/upload/image/2aa.png,

语法:

~ 为区分大小写匹配
~* 为不区分大小写匹配
!和!*分别为区分大小写不匹配及不区分大小写不匹配

参考:

https://moonbingbing.gitbooks.io/openresty-best-practices/ngx/nginx_local_pcre.html

http://nginx.org/en/docs/

猜你喜欢

转载自my.oschina.net/huangweiindex/blog/1794829