rewrite
`rewrite` 指令根据指定的模式和替换字符串修改请求的 URI。 — NGINX HTTP Core
rewrite
serverlocationif in serverif in location
语法rewrite regex replacement [flag];
默认值none
上下文server, location, if in server, if in location
模块NGINX HTTP Core
参数2-3
说明
`rewrite` 指令在 NGINX 中用于根据特定的正则表达式模式更改传入请求的 URI。该指令在 URL 重定向或重写 URL 以实现更简洁、用户友好的访问时尤其有用。该指令接受两个或三个参数:第一个是将与传入请求 URI 匹配的正则表达式模式,第二个是用于替换以更改 URI 的替换字符串,可选的第三个参数指定标志,该标志决定重写是在当前请求上下文中执行还是导致新的请求(也称为重定向)。 当执行 `rewrite` 指令时,NGINX 会将传入请求的 URI 与指定的正则表达式进行匹配。如果匹配成功,它会将匹配的部分替换为替换字符串,从而有效地改写 URI。如果使用了像 `last`、`break` 或 `redirect` 这样的重定向标志,NGINX 将根据该标志的行为处理后续流程。例如,`last` 将停止处理重写并继续使用新的 URI,而 `break` 将停止处理当前指令集,`redirect` 将发送 302 响应,强制客户端跳转到新的 URI。 错误配置的正则表达式或不正确使用标志可能导致意外行为或循环重写,因此在使用此指令时需要对语法和逻辑给予谨慎的注意。
配置示例
rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;
⚠
请确保 regular expression 能准确匹配目标 URI,因为过于复杂的模式会导致性能下降。
⚠
使用 `redirect` 标志会触发完整的客户端 redirect,这可能不适合用于 internal rewrites。
⚠
应注意避免无限 rewrite 循环,确保 rewritten URI 不会再次匹配 rewrite rule。