nginx重定向

原文链接:https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite
句法: rewrite regex replacement [flag];
默认: —
语境: server, location,if
如果指定的正则表达式与请求 URI 匹配,则 URI 将按照replacement字符串中的指定进行更改。这些rewrite指令按照它们在配置文件中的出现顺序依次执行。可以使用标志来终止对指令的进一步处理。如果替换字符串以“ http://”、“ https://”或“ $scheme”开头,则处理停止并将重定向返回给客户端。

可选flag参数可以是以下之一:

last
停止处理当前的ngx_http_rewrite_module指令集 并开始搜索与更改的 URI 匹配的新位置;
break
ngx_http_rewrite_module与break指令一样 停止处理当前的指令集 ;
redirect
返回一个带有 302 代码的临时重定向;如果替换字符串不以“ http://”、“ https://”或“ $scheme”开头,则使用;
permanent
返回带有 301 代码的永久重定向。
完整的重定向 URL 是根据请求方案 ( $scheme) 以及 server_name_in_redirect和 port_in_redirect指令形成的。

例子1:

server {
    ...
    rewrite ^ www.baidu.com;
    ...
}

然后重启nginx配置,浏览器访问被重定向的URL,可以看到我们已经成功重定向到百度了。

[root@localhost html]# curl -i URL
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.20.1
Date: Fri, 03 Sep 2021 21:57:32 GMT
Content-Type: text/html
Content-Length: 145
Connection: keep-alive
Location: https://www.baidu.com

<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>

例子2:

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

但是如果这些指令放在“ /download/”位置,last标志应该被替换 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字符串包含新的请求参数,则先前的请求参数会附加在它们之后。如果这是不希望的,在替换字符串的末尾放置一个问号可以避免附加它们,例如:

重写 ^/users/(.*)$ /show?user=$1? 最后的;
如果正则表达式包含“ }”或“ ;”字符,则整个表达式应该用单引号或双引号括起来。

句法: rewrite_log on | off;
默认:
rewrite_log off;
语境: http, server, location,if
启用或禁用将ngx_http_rewrite_module 模块指令处理结果记录到级别的error_log中notice。

句法: set $variable value;
默认: —
语境: server, location,if
value为指定的 设置 a variable。该value可以包含文本,变量,他们的组合。

句法: uninitialized_variable_warn on | off;
默认:
uninitialized_variable_warn 开启;
语境: http, server, location,if
控制是否记录有关未初始化变量的警告。

原文地址:https://www.cnblogs.com/pengpengboshi/p/15339095.html