最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx Rewrite 规则中匹配规则如何写
时间:2026-08-11 08:52:49 编辑:袖梨 来源:一聚教程网
Nginx rewrite规则基于PCRE正则匹配URI,需加^$锚定、用捕获组$1引用、末尾?清空原参数;执行顺序为先location后rewrite,last重启匹配、break终止查找,不处理查询字符串本身。
Nginx 的 rewrite 规则本质是基于 PCRE 正则表达式(Perl Compatible Regular Expressions)进行 URL 匹配与重写,*不支持通配符 `直接匹配,必须用正则语法。写对匹配规则的关键在于:理解location和rewrite` 的执行顺序、正确使用捕获组与变量、避免常见陷阱。
rewrite 匹配规则怎么写(核心写法)
-
rewrite指令本身只处理 URI(不带域名和参数),且在location块内或server块顶层生效 - 匹配部分是纯正则表达式,常用符号:
-
^表示开头,$表示结尾(强烈建议加,避免误匹配) -
(.*)或([^?]*)捕获路径(注意:默认不匹配查询字符串?xxx) -
$1,$2引用捕获组;$args或$query_string保留原始参数
-
- 示例:把
/old/page/123→/new/article?id=123rewrite ^/old/page/(d+)$ /new/article?id=$1? permanent;
注意末尾的
?:它会清空原始 query string,否则会自动拼接(如原链接带?t=1,不加?就变成/new/article?id=123&t=1)
location 和 rewrite 的配合逻辑
- Nginx 先匹配
location,再在匹配到的location块里执行rewrite -
rewrite执行后,默认会重新发起内部跳转(即再次走 location 匹配),除非加last或break - 常用标志说明:
-
last:重写后停止当前 location,重新搜索匹配新 URI 的 location(适合路径改写) -
break:重写后不再查找 location,直接处理当前块剩余指令(适合简单替换) -
redirect(302)或permanent(301):外部重定向,浏览器地址栏会变
-
常见匹配场景写法
-
去掉多级目录前缀(如
/v1/api/xxx → /api/xxx)location ^~ /v1/ {rewrite ^/v1(/.*)$ $1 break;} -
强制 HTTPS + 去掉 www
if ($host = 'www.example.com') {return 301 https://example.com$request_uri;}if ($scheme != 'https') {return 301 https://$host$request_uri;} -
静态资源忽略 rewrite(推荐用 location 精确匹配)
location ~* .(js|css|png|jpg|gif)$ {# 不写 rewrite,直接 serve 文件expires 1y;add_header Cache-Control "public, immutable";}
容易出错的细节
-
rewrite不处理查询参数本身,只作用于 path 部分;想操作?后内容,要用$args变量拼接 -
if在location外可用,但在location内慎用(Nginx 最新不推荐嵌套 if) - 正则中特殊字符如
.,?,+,{,}必须转义(.?) - 测试正则建议用在线工具(如 regex101.com),选 PCRE 模式,并开启
m(多行)和g(全局)辅助调试
不复杂但容易忽略
相关文章
- 《归零巡礼:亡谍镇魂曲》死亡加长混音版成就攻略分享 08-11
- 洛克王国世界PVP纯火队配队攻略 08-11
- 依露希尔星晓哪个公司的游戏 依露希尔星晓游戏玩法分享 08-11
- 帝国史诗武器推荐有哪些 08-11
- 云原神网页版入口位置分享 08-11
- 《归零巡礼:亡谍镇魂曲》致命镜头成就攻略分享 08-11