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

NGINX技术问题:如何提取不带扩展名的文件名?

NGINX提取不带扩展名的文件名解决方案

方法一:单个Map直接匹配

直接修改正则规则,同时兼容带扩展名和无扩展名的文件:

map $uri $basename_without_ext {
    # 匹配带扩展名的文件,捕获最后一个/到第一个.之间的内容
    ~/(?<captured_basename>[^/.]+)\.[^/]*$ $captured_basename;
    # 匹配无扩展名的文件,直接捕获最后一个/之后的全部内容
    ~/(?<captured_basename>[^/.]+)$ $captured_basename;
}

正则说明:

  • [^/.]+ 匹配不包含/和.的字符序列,确保只捕获纯文件名部分
  • 第一条规则优先匹配带扩展名的场景,第二条处理无扩展名的情况

方法二:分两步处理(兼容原有配置)

如果想保留你原来获取带扩展名文件名的逻辑,可以分两步剥离扩展名:

# 第一步:获取带扩展名的文件名(你的原有配置)
map $uri $basename {
    ~/(?<captured_basename>[^/]*)$ $captured_basename;
}
# 第二步:从带扩展名的文件名中剥离扩展名
map $basename $basename_without_ext {
    ~^(?<name>[^.]+)\.?.*$ $name;
}

正则说明:

  • ^(?<name>[^.]+) 捕获从开头到第一个.之前的所有字符
  • \.?.* 匹配可选的.及后续任意字符,兼容无扩展名的文件

使用时,在server或location块中直接调用$basename_without_ext即可获取不带扩展名的文件名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:59:58