Nginx-Rewrite规则
标签:Nginx

Rewrite规则

rewrite规则实现对URL重写以及重定向。

1. 语法

Syntax: rewrite regex replacement [flag];
Default: ——
Context:server,location,if

例子:rewrite ^(.*)$/pages/maintain.html break;

2. 正则表达式

符号 语义
. 匹配除换行符以外的任意字符
? 重复0次或1次
+ 重复1次或更多次
* 最少连接数,那个连接数少就分发
\d 匹配数字
^ 匹配字符串的开始
$ 匹配字符串的结束
{n} 重复n次
{n,} 重复n次或更多次
[c] 匹配单个字符c
[a-z] 匹配a-z小写字母的任意一个
\ 转义字符
() 用于匹配括号之间的内容,通过$1,$2调用
if($http_user_agent ~ MISE){
    rewrite ^(.*)$ /mise/$1 break;
}

可以通过p】cretest(需要单独安装)进行正则表达式和对应字符串的匹配测试。

4. 配置

4.1 flag

配置 说明
last 停止rewrite检测
break 停止rewrite检测
redirect 返回302临时重定向(客户端缓存后下次还是会经过服务端),地址栏会显示跳转后的地址
permanent 返回301永久重定向(客户缓存后下次直接去访问新的地址),地址栏会显示跳转后的地址

测试代码:

server {
    listen 80 default_server;
    server_name 192.168.91.136;

    access_log  /var/log/nginx/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"}';
    }
}

结果:

使用break进行访问:

break匹配道一个location后,就停留在这一级的location里面了,不会向下进行新的匹配。

使用last进行访问:

last会新建连接查看后面的location,去重新匹配。

对redirect进行测试

直接使用last

使用redirect:

5. 优先级

  1. 先执行server块的rewrite指令(适用于全局的跳转)
  2. 执行location匹配
  3. 执行选定的location中的rewrite
  • 3 min read

CONTRIBUTORS


  • 3 min read