Nginx配置指令之rewrite

Nginx 阅读: 179

rewrite指令在Nginx配置文件里面是用于重写的,有点像PHP框架里面的路由配置。

下面内容从官方文档翻译:

语法 : rewrite regex replacement [flag];
默认值: 无
所处环境: server, location, if

如果指定的正则表达式(regex)与请求URI匹配,则URI将更改为替换字符串(replacement)中指定的URI。rewrite重写指令是按照它们在配置文件中的出现顺序执行的。可以使用标志终止对指令的进一步处理。如果替换字符串(replacement)以"http:/"、"https:/" 或 "$plan"开头,则处理停止并将重定向返回给客户端。

一个可选的标志参数(flag)可以是:

  • last:停止处理当前 ngx_http_rewrite_module 指令集,并开始搜索与更改的URI匹配的新位置;
  • break:停止处理当前的 ngx_http_rewrite_module 模块指令集,就像中断指令一样;
  • redirect:返回302代码的临时重定向;如果替换字符串不以"http:/"、"https:/" 或 "$plan"开头,则使用;
  • permanent:使用301代码返回永久重定向。

完整的重定向URL是根据请求方案($plan)和 server_name_in_redirective 和 port_in_redirect 指令形成的。

示例:

server {
    ...
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;
    ...
}

但是,如果将这些指令放在"/Download/"位置中,则应将最后一个标志替换为 break,否则nginx将进行10次循环并返回500错误:

location /download/ {
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  break;
    return  403;
}

如果替换字符串(replacement)包括新的请求参数,则在它们后面追加前一个请求参数。如果这是不想要的,那么在替换字符串的末尾添加问号可以避免将它们追加,例如:

rewrite ^/users/(.*)$ /show?user=$1? last;

如果正则表达式包括“}”或“;”字符,则整个表达式应以单引号或双引号括起来。

版权声明:本文为博主原创文章,转载需注明来自: 洛洛の空间