Nginx之URL重写

主要使用nginx提供的rewrite功能,并且支持正则表达式。

主要功能

rewrite语法

rewrite regex replacement [flag];
rewrite ^/(.*) http://192.168.1.1/$1 parmanent;

参数解析:
rewrite:开启跳转功能
^/(.*):正则表达式,表示匹配所有的请求,匹配成功之后跳转
$1:取出前面正则表达式中括号中的内容
parmanent:表示301,重定向标记

flag参数解析

在Nginx的rewrite​​指令中,可以使用一些标志(flags)来修改重写规则的行为。以下是一些常用的标志:

  1. last:

    • 语法:last;​​

    • 行为:停止处理当前location​​块中的后续指令,然后重新开始在新URI上查找匹配的location​​。

  2. break:

    • 语法:break;​​

    • 行为:停止执行当前location​​块中的后续指令,并将控制传递给下一个处理阶段,而不会重新查找匹配的location​​。

  3. redirect:

    • 语法:redirect;​​

    • 行为:返回临时重定向(HTTP状态码302),地址栏显示跳转后的url,爬虫不会更新该url。

  4. permanent:

    • 语法:permanent;​​

    • 行为:返回永久重定向(HTTP状态码301),地址栏显示跳转后的url,爬虫会更新该url。

  5. if_not_modified:

    • 语法:if_not_modified;​​

    • 行为:只有在客户端请求中包含If-Modified-Since​​或If-Unmodified-Since​​头的情况下才执行重写。

  6. last_modified:

    • 语法:last_modified;​​

    • 行为:添加Last-Modified​​头,通常与if_modified_since​​结合使用。

实例

基本的重定向:

location /old-uri {
    rewrite ^/old-uri$ /new-uri permanent;
}

使用变量:

location ~ ^/user/(\d+)$ {
    rewrite ^/user/(\d+)$ /profile?id=$1 last;
}

阻止重写处理:

location /static/ {
    rewrite ^/static/(.*)$ /static$1 break;
}