You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx location块支持哪些正则?请求匹配失败报404求助

解决Nginx请求匹配404问题 & Location正则模式详解

一、Nginx Location块支持的正则表达式模式

先给你梳理下Nginx里location可用的匹配规则,按优先级从高到低排序:

  • 精确匹配(=):用=前缀,比如location = /login { ... },只有当请求路径完全和配置的路径一致时才匹配,优先级最高,适合首页、固定路径的接口。
  • 前缀优先匹配(^~):用^~前缀,比如location ^~ /static/ { ... },如果请求路径以该前缀开头,会直接使用这个location,不再检查后续的正则匹配,优先级高于正则匹配。
  • 区分大小写正则匹配(~):用~前缀,比如location ~ \.php$ { ... },匹配符合正则表达式的请求,区分大小写。
  • 不区分大小写正则匹配(~*):用~*前缀,比如location ~* \.(png|jpg)$ { ... },功能和~类似,但不区分大小写。
  • 普通前缀匹配:不带任何修饰符,比如location / { ... },匹配所有以指定路径开头的请求,优先级最低,作为兜底配置。

二、解决你的404请求匹配问题

先分析你的问题:请求localhost:80/client/images/card.png返回404,错误信息显示Nginx去html/client/images/card.png找文件,说明你的第二个正则location完全没匹配上,请求落到了第一个兜底的location /里。

问题出在哪?

你的正则location ~/.*/images/写法有误:
Nginx的正则location语法是~ 正则表达式,你写的~/.*/images/会被解析成用/作为正则的分隔符,导致实际匹配的内容不符合预期,自然匹配不到/client/images/card.png。

修正方案

给你两个可行的修正方式,选一个就行:

方案1:修正正则表达式写法

把正则location改成正确的格式,锚定路径开头并精准匹配包含/images/的路径:

location ~ ^/.*/images/ { 
    root C:/web; 
}

或者更精准地匹配/client/images/开头的请求(效率更高):

location ~ ^/client/images/ { 
    root C:/web; 
}
方案2:改用前缀优先匹配(更高效)

如果你的图片路径都是固定前缀的,完全不需要用正则,用^~前缀匹配更高效,性能比正则好:

location ^~ /client/images/ { 
    root C:/web; 
}

验证修正效果

修正后,Nginx会匹配到这个location,把请求路径/client/images/card.png拼接到root C:/web后面,也就是去C:/web/client/images/card.png找文件,正好符合你的预期,404问题就解决了。

另外补充下root和alias的区别:如果你的图片实际存在C:/web/images/card.png而不是C:/web/client/images/card.png,那你应该用alias C:/web/images/代替root C:/web,这点要根据你的实际文件存储路径调整。

内容的提问来源于stack exchange,提问作者user679526

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:58:55