nginx域名rewrite是Nginx服务器中实现URL重写与域名跳转的核心功能,通过灵活的规则配置,可满足域名规范化、路径美化、伪静态等多种需求,提升网站的可维护性与用户体验,以下从核心指令、应用场景、配置示例及注意事项等方面展开说明。

核心指令:rewrite的语法与标记
rewrite指令的基本语法为rewrite regex replacement [flag],其中各参数作用如下:
- regex:正则表达式,用于匹配请求的URI,需符合PCRE规范(如
^表示字符串开头,表示结尾,匹配任意字符等); - replacement:替换后的目标字符串,可包含变量(如
$host、$args)或固定字符串; - flag:标记位,控制重写行为的后续流程,常用标记包括:
last:匹配完成后停止当前server块的rewrite检查,并重新发起请求(适用于内部跳转,如路径重写);break:停止当前server块的rewrite检查,直接在当前location中处理请求(适用于简单重写);redirect:返回302临时跳转,浏览器地址栏会显示新URL,适用于临时域名切换;permanent:返回301永久跳转,搜索引擎会更新收录地址,适用于域名永久迁移。
典型场景:域名与URL的灵活处理
域名规范化(www与非www统一)
为避免分散权重,需将带www的域名统一跳转至不带www的形式(或反之),将www.example.com跳转至example.com:
server {
listen 80;
server_name www.example.com;
rewrite ^(.*)$ http://example.com$1 permanent; # 301永久跳转
}
HTTP强制跳转HTTPS
为提升安全性,需将HTTP请求强制重定向至HTTPS,同时保留原始路径和参数:
server {
listen 80;
server_name example.com;
rewrite ^(.*)$ https://$host$1 permanent; # 永久跳转至HTTPS
}
伪静态与路径美化
将动态URL(如index.php?id=1)转换为静态形式(如/article/1),提升用户体验:
location /article/ {
rewrite ^/article/(\d+)$ /index.php?id=$1 last; # 匹配/article/数字,重写为动态脚本
}
负载均衡的路径适配
在后端服务为多实例时,可通过rewrite调整请求路径,匹配不同服务的路由规则:

location /api/ {
rewrite ^/api/(v1|v2)/(.*)$ /$2 break; # 去除/api/v1前缀,将请求转发至后端
proxy_pass http://backend_server;
}
配置实战:从基础到进阶示例
示例1:多域名跳转与路径保留
假设需要将old.com和www.old.com全部跳转至new.com,并保留原始路径:
server {
listen 80;
server_name old.com www.old.com;
rewrite ^(.*)$ https://new.com$1 permanent; # 保留路径,永久跳转
}
示例2:基于条件的动态重写
若需根据请求参数决定重写方向(如?type=mobile时跳转至移动端页面):
server {
listen 80;
server_name example.com;
if ($args ~ "type=mobile") {
rewrite ^/index\.html$ /mobile.html last; # 参数匹配时跳转移动端
}
}
注意:
if指令在Nginx中属于“危险指令”,过度使用可能影响性能,建议优先使用map指令替代复杂条件判断。
避坑指南:常见问题与优化建议
-
避免循环重写:
错误的规则可能导致无限重写(如rewrite ^(.*)$ /$1 last无实际替换却触发重写),需通过error_log排查,确保replacement与regex不形成闭环。 -
正则表达式优化:
复杂正则(如贪婪匹配)会消耗性能,建议使用具体字符替代(如[a-z0-9]+代替),并减少不必要的分组捕获。
-
测试与验证:
修改配置后,先通过nginx -t检查语法正确性,再使用curl -I URL观察响应状态码(如301/302)或curl -L URL跟踪跳转链路。 -
与location的配合:
rewrite规则在location块执行时,需注意last与break的区别:last会重新匹配location,而break直接在当前location处理,避免因location优先级导致重写失效。
通过合理配置nginx域名rewrite,可高效解决域名管理、URL优化等问题,但需兼顾性能与可维护性,避免过度设计,实际应用中,建议结合业务场景逐步迭代规则,并通过日志监控持续优化。

















