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
相关产品推荐
相关产品推荐

