Nginx location匹配规则优先级详解 Nginx

前言

多个 location 写在一起,到底命中哪一个?Nginx 的 location 匹配有严格优先级:精确、前缀、正则按书写顺序。搞混会导致规则不生效或被错误覆盖。本文讲解匹配类型、优先级顺序、常见冲突和调试方法。

操作步骤

1. 匹配类型与优先级(从高到低)

  1. = 精确匹配:location = /
  2. ^~ 前缀匹配(命中后不再找正则)
  3. ~ 或 ~* 正则匹配(区分/不区分大小写,按书写顺序)
  4. 普通前缀匹配(最长前缀)

2. 精确匹配首页

location = / {
    root /var/www/html;
}

3. 前缀优先,跳过正则

location ^~ /static/ {
    root /var/www;
}

4. 正则按书写先后

location ~* \.(css|js)$ { ... }
location ~* \.(jpg|png)$ { ... }

5. 普通前缀兜底

location / {
    proxy_pass http://backend;
}

6. 调试匹配命中

nginx -T 2>/dev/null | grep -A3 location

常见坑

  1. 普通前缀和正则同时满足,正则优先级更高,前缀被覆盖。
  2. ^~ 和 = 优先级高于正则,常用于静态目录。
  3. 正则按书写顺序,第一个命中就停,顺序影响结果。
  4. 漏写 ~* 的 i,大写扩展名匹配不到。
  5. location / 写在前面,被当作普通前缀但不抢先。
  6. 别名 alias 与 root 混用导致路径错误。
  7. 多层 location 继承,内层规则覆盖外层。

总结

优先级:= > ^~ > 正则(~ ~*)按顺序 > 普通前缀。静态资源用 ^~ 抢在正则前,正则注意书写顺序和大小写。调试时用 nginx -T 看最终生效配置,别只看源码。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-11-15 07:13 

Linux批量重命名文件rename命令教程 Linux

前言

上传的图片或日志文件名不统一,需要批量替换前缀、扩展名或去掉空格,手动改名太慢。rename 支持正则表达式批量重命名,一条命令改一批。本文讲解 rename 安装、替换文字、改扩展名、大小写转换和安全预览。

操作步骤

1. 确认 rename 版本

rename -V

不同发行版是 perl 版或 util-linux 版,正则写法略有差异。

2. 批量替换文件名中的文字

rename 's/old/new/' *.jpg

perl 版 s/旧/新/ 替换。

3. 批量改扩展名

rename 's/\.txt$/.md/' *.txt

4. 去掉文件名空格

rename 's/\s+/_/g' *.png

5. 大小写转换(小写)

rename 'y/A-Z/a-z/' *

6. 干跑预览(不实际改名)

rename -n 's/old/new/' *.jpg

7. 配合循环的替代写法

for f in *.log; do mv "$f" "${f%.log}.txt"; done

常见坑

  1. 不加 -n 直接改,写错正则批量损坏文件名,务必先预览。
  2. perl 版和 C 版 rename 参数不同,先看版本。
  3. 正则没加锚点,中间片段被误替换。
  4. 通配符匹配到目录,rename 对目录也会改。
  5. 文件名含特殊字符,用引号和正确转义。
  6. 重名冲突时部分文件被覆盖,先检查目标名。
  7. 重要文件先备份再批量改名。

总结

rename 用正则批量改名,s/旧/新/ 替换、y/源/目标/ 转大小写,-n 干跑预览。先确认版本,改扩展名和去空格都靠正则锚点。批量操作前预览、备份,避免误改覆盖。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-11-15 07:10 
'); })();