案例:
以前服务器中,图片路径地址如下:
/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