一、rewrite配置语法
指令:rewrite regex replacement [flag]; 可存在位置:server,location,if
说明:regex是匹配规则,replacement要跳转的路径,flag可以是以下值
last:停止rewrite检测,继续匹配
break:停止rewrite检测,停止匹配
redirect:返回302临时重定向,地址栏会显示跳转后的地址
permanent:返回301永久重定向,地址栏会显示跳转后的地址
其实permanent和redirect区别就是301和302的区别,301重定向是永久性的,浏览器会把这个跳转规则进行缓存,所以关闭nginx后仍然会进行跳转,302重定向是临时更改,不会被缓存或保存
二、rewrite使用场景
1,URL访问跳转:支持开发设计,页面跳转,兼容性支持,展示效果
2.SEO优化:依赖于url路径,以便支持搜索引擎录入
3.维护:后台维护,流量转发等
4.安全:伪静态,真实动态页面进行伪装
三、break和last区别
案例
location ~^/last {
root /usr/share/nginx/html;
rewrite ^/last /test/ last;
}
location ~ ^/break {
root /usr/share/nginx/html;
rewrite ^/break /test/ break;
}
location /test {
default_type application/json;
return 200 '{"status":"success"}';
}
测试结果如下
[root@web01 conf.d]# curl http://192.168.93.225/last/ //{"status":"success"}
[root@web01 conf.d]# curl http://192.168.93.225/break/ //404
过程分析:
请求
http://192.168.93.225/last/
会进入location ~^/last{}
规则,请求路径重写成http://192.168.93.225/test/
并重新发送一次请求,进入location /test{}
规则,所以返回了{"status":"success"}
请求
http://192.168.93.225/break/
会进入location ~^/break{}
规则,请求路径重写成http://192.168.93.225/test/
,但是其不会重新发送请求。而是停止匹配,因为其站点目录是/usr/share/nginx/html
,所以他是寻找/usr/share/nginx/html/test/index.html
文件。而其文件不存在所以返回404
.
验证:
[root@web01 test]# tree /usr/share/nginx/html/test/
/usr/share/nginx/html/test/
0 directories, 0 files
[root@web01 test]# echo "123" > index.html
[root@web01 test]# tree /usr/share/nginx/html/test/
/usr/share/nginx/html/test/
└── index.html
0 directories, 1 file
[root@web01 test]# curl http://192.168.93.225/break
123