nginx的rewrite功能由ngx_http_rewrite_module提供且默认已编译启用,无需手动加载;只需确保配置语法合法、作用域正确(仅限server/location/if块)、pcre支持可用,并通过nginx -v验证模块存在。

确认 rewrite 模块已存在
运行以下命令检查:
nginx -V 2>&1 | grep -o with-http-rewrite-module
若输出 with-http-rewrite-module,说明模块已启用;若无输出,说明是精简版(如某些 Alpine 镜像),需重新编译或换用完整版 Nginx。
在 nginx.conf 中启用 rewrite 的常见写法
rewrite 指令只能出现在 server、location 或 if 块中,不能直接写在 http 块顶层。例如:
- 将
/old-page永久重定向到/new-page:
rewrite ^/old-page$ /new-page permanent;
}
- 匹配带参数的旧 URL 并保留参数跳转:
rewrite ^/article/(.*)$ /blog/$1? break;
}
- 基于域名做跳转(如 www.old.com → www.new.com):
listen 80;
server_name www.old.com;
return 301 https://www.new.com$request_uri;
}
几个必须注意的细节
- 正则表达式需用
^和$明确边界,避免误匹配 - 使用
permanent(301)或redirect(302)时,Nginx 自动添加Location响应头 -
last和break不触发外部重定向,只在内部重写 URI 后继续匹配 location;慎用于循环场景 - 若用
if判断变量(如$args、$http_user_agent),需知if在 location 中有局限性,优先考虑用map或更稳定的 rewrite + return 组合
验证与调试
- 修改后先执行
nginx -t检查语法 - 开启 rewrite 日志辅助排查(临时):
rewrite_log on;(需同时设置error_log /path/to/error.log notice;) - 重启或重载:
nginx -s reload











