如何合并两类Nginx Location指令?处理/themes/目录指定后缀资源
解决方案
要实现仅对/themes/目录下指定后缀的文件应用特定规则,同时保留现有两个互斥的Location指令且不使用if,可以利用Nginx的Location匹配优先级规则调整配置顺序和规则类型:
# 1. 优先匹配/themes/目录下的目标后缀文件 location ~* ^/themes/.*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { # 填写针对/themes/下静态文件的配置,例如: expires 30d; add_header Cache-Control "public, immutable"; # 其他所需配置... } # 2. 确保/images/目录的请求优先匹配(使用^~跳过后续正则匹配) location ^~ /images/ { # 填写/images/目录的原有配置 ... } # 3. 全局匹配其他目录下的目标后缀文件 location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ { # 填写原有全局静态文件配置 ... }
原理说明
- Nginx对正则Location(
~*)的匹配按配置文件中的顺序执行,第一个匹配到的规则即生效。把/themes/专属规则放在最前面,能确保这类请求被优先处理,不会落入全局正则规则。 - 用
^~标记/images/的规则,会让它的优先级高于后续正则规则,确保所有以/images/开头的请求都走这个规则,和全局正则规则互斥,符合原有需求。 - 最后一个全局正则规则会处理所有不在
/themes/、/images/目录下的目标后缀文件。
内容的提问来源于stack exchange,提问作者Anne Tuff
相关产品推荐
相关产品推荐

