Nginx 之 Rewrite 规则
write 规则介绍
Rewite 规则作用
- Rewrite规则可以实现对url的重写,以及重定向
作用场景:
- URL访问跳转,支持开发设计,如页面跳转,兼容性支持,展示效果等
- SEO优化
- 维护:后台维护、流量转发等
- 安全
注:nginx官方文档:http://nginx.org/en/docs/http/ngx_http_rewrite_module.html
配置语法:
- Syntax: rewrite regex replacement [flag];
- Default:——
- Context:server、location、if
简单实例
1 | rewrite ^(.*)$ /pages/maintain.html break ; |
解释说明:
- 会把所有的请求都重定向到 /pages/maintain.html 页面
常用的正则表达式
在linux下,可以用pcretest来测试
小示例
1 2 3 4 | rewrite index\.php$ /pages/maintain.html break ; if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1 break ; } |
解释说明
- \ --转义字符
- ( ) --用于匹配括号之间的内容,通过$1、$2调用
(.*) 会把所有参数的内容提取,传到/msie/下
rewrite配置语法中的flag参数
last 停止rewrite检测【如果没有匹配到,会继续向下匹配】
break 停止rewrite检测【如果没有匹配到,则不再向下匹配,直接返回结果404】
redirect 返回302临时重定向,地址栏会显示跳转后的地址
permanent 返回301永久重定向,地址栏会显示跳转后的地址
last与break的区别案例
test_rewrite1.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | server { listen 80 default_server; server_name www.zhangbiao.com; access_log / var /log/nginx/log/host.access.log main; root /opt/app/code; location ~ ^/ break { rewrite ^/ break /test/ break ; } location ~ ^/last { rewrite ^/last /test/ last; } location /test/ { default_type application/json; return 200 '{"status":"success"}' ; } } |
可以在终端使用 curl -vL 可以看到请求的全过程
1 | curl -vL www.zhangbiao.com/last/ |
访问
1 | http: //www.zhangbiao.com/test/ |
访问
1 | http: //www.zhangbiao.com/last/ |
访问
1 | http: //www.zhangbiao.com/break/ |
可以发现访问 last 的时候新建立了一个请求 /test/ ,而访问/break/ 请求的时候 会去 /opt/app/code 下找相应的资源,没找到所以报错
Rewrite规则_redirect和permanent区别
test_rewrite1.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 | server { listen 80 default_server; server_name www.zhangbiao.com; access_log / var /log/nginx/log/host.access.log main; root /opt/app/code; location ~ ^/imooc { rewrite ^/imooc http: //www.imooc.com/ permanent; #rewrite ^/imooc http://www.imooc.com/ redirect; } } |
redirect 表示临时的重定向 ,只要后端服务是开者的。每次访问 /imoc 都会重定向到 http://www.imooc.com
permanent 表示永久重定向,第一次访问成功后,把后端服务关闭后,访问/imoc 仍然会重定向到 http://www.imooc.com
rewrite 规则使用场景案例
test_rewrite.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | server { listen 80; server_name www.zhangbiao.com; root /opt/app/code; location / { rewrite ^/course-(\d+)-(\d+)-(\d+)\.html$ /course/$1/$2/course_$3.html break ; if ($http_user_agent ~* Chrome) { rewrite ^/nginx http: //coding.imooc.com/class/121.html redirect; } if (!-f $request_filename) { rewrite ^/(.*)$ http: //www.baidu.com/$1 redirect; } index index.html index.htm; } error_page 500 502 503 504 404 /50x.html; } |
访问在 /opt/app/code/course/11/22 下存在的资源文件
1 | http: //www.zhangbiao.com/course-11-22-33.html |
访问在 /opt/app/code/course/11/22 下不存在的资源文件
1 | http: //www.zhangbiao.com/course-11-22-5 |
rewrite优先级规则
- 执行server 块的rewrite 指令。将所有的网站都重定向同一个网站。
- 执行location匹配。
- 执行选定的location中的rewrite。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了