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