nginx 08-Nginx的rewrite规则
nginx的rewrite作用
- 可通过rewrite规则实现url重写以及重定向
- 使用场景如下:
- URL访问跳转,支持开发设计
- 页面跳转、兼容性支持、展示效果等
- SEO优化
- 维护:后台维护、流量转发等
- 安全
- 配置语法
rewrite regex replacement [flag]; (server、location、if) 案例: rewrite ^(.*)$ /pages/maintain.html break;
nginx之正则表达式
. --匹配除换行符以外的任意字符 ? --重复0次或1次 + --重复1次或更多次 * --最少链接数,那个机器连接数少就分发 \d --匹配数字 ^ --匹配字符串的开始 $ --匹配字符串的介绍 {n} --重复n次 {n,} --重复n次或更多次 [c] --匹配单个字符c [a-z] --匹配a-z小写字母的任意一个 \ --转义字符 rewrite index\.php$ /pages/maintain.html break; ( ) --用于匹配括号之间的内容,通过$1、$2调用 if ($http_user_agent ~ MSIE) { rewrite ^(.*)$ /msie/$1 break; }
nginx之flag描述
last --停止rewrite检测,重新发起新的请求 break --停止rewrite检测,根据本地路径去查找静态页面 redirect --返回302临时重定向,地址栏会显示跳转后的地址 permanent --返回301永久重定向,地址栏会显示跳转后的地址
last与break的区别案例
server { listen 80 default_server; server_name location; 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"}'; } }
redirect与permanent的区别案例
server { listen 80 default_server; server_name location; 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; #rewrite ^/last /test/ redirect; } location ~ ^/baidu { rewrite ^/baidu http://www.baidu.com/ permanent; #rewrite ^/baidu http://www.baidu.com/ redirect; } location /test/ { default_type application/json; return 200 '{"status":"success"}'; } }
正则匹配规矩案例
server { listen 80; server_name location; location / { rewrite ^/course-(\d+)-(\d+)-(\d+)\.html$ /course/$1/$2/course_$3.html break; if ($http_user_agent ~* Chrome) { rewrite ^/nginx http://192.168.10.10/class/121.html redirect; } if (!-f $request_filename) { rewrite ^/(.*)$ http://www.baidu.com/$1 redirect; } index index.html index.htm; } }
rewrite规则优先级
- 执行server块的rewrite指令
- 执行location匹配
- 执行选定的location中的rewrite

更多精彩