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) 以及 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/(.*)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
控制是否记录有关未初始化变量的警告。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了