nginx URL 重写

使用 rewrite 指令实现 URL 重定向和路径改写

语法

rewrite regex replacement [flag];

参数

参数说明示例级别
last 停止当前 rewrite 并重新匹配 location rewrite ^/old/(.*)$ /new/$1 last; 常用
break 停止 rewrite 但不重新匹配 rewrite ^/img/(.*)$ /data/images/$1 break; 常用
redirect 302 临时重定向 rewrite ^/temp$ /new redirect; 常用
permanent 301 永久重定向 rewrite ^/old$ /new permanent; 常用
return 直接返回状态码(比 rewrite 更高效) return 301 https://$host$request_uri; 常用

示例

去掉 URL 末尾斜杠

rewrite ^/(.*)/$ /$1 permanent;
/about/ → /about

旧路径重定向

location /blog {
    rewrite ^/blog/post-(\d+)$ /articles/$1 permanent;
}
/blog/post-123 → /articles/123

强制 www

server {
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}
用 return 比 rewrite 更高效

API 版本路由

rewrite ^/api/v1/(.*)$ /api/current/$1 last;
内部重写,客户端 URL 不变

常见错误

rewrite 导致无限循环 检查 rewrite 规则是否会匹配自身,用 last 或 break 控制流程
重定向后参数丢失 rewrite 默认保留查询参数,如果不想保留在末尾加 ?

技巧

相关命令