如何配置Nginx Location块实现带匹配规则的字体请求回退
如何配置Nginx Location块实现带匹配规则的字体请求回退
嘿,这个需求用Nginx的正则匹配和try_files就能完美搞定,我给你拆解清楚思路和最终配置:
首先,核心是要精准捕获请求URL里的字符范围部分(比如256-511.pbf),这样才能在原字体缺失时,无缝切换到Noto Sans的同范围文件。这里用正则location来做捕获比alias更灵活,直接上配置:
location ~ ^/fonts/[^/]+/(\d+-\d+\.pbf)$ { alias /data/fonts/ofm/; # 先尝试原请求的字体文件,找不到就用Noto Sans Regular的对应范围文件 try_files $uri "Noto Sans Regular/$1" =404; }
我给你解释下每部分的作用:
- 正则表达式
^/fonts/[^/]+/(\d+-\d+\.pbf)$专门匹配/fonts/[任意字体名]/[数字范围].pbf格式的请求,并且把后面的[数字范围].pbf捕获成变量$1,这是实现同范围匹配的关键。 alias /data/fonts/ofm/和你原来的配置保持一致,负责把/fonts/开头的请求映射到服务器本地的/data/fonts/ofm/目录。try_files的逻辑很直白:先找用户请求的原字体文件($uri对应的实际路径是/data/fonts/ofm/[原字体名]/[范围].pbf),如果文件不存在,就自动切换到/data/fonts/ofm/Noto Sans Regular/$1(也就是同范围的Noto Sans字体文件),要是这个文件也找不到,就返回404。
注意事项
- 如果你服务器上的Noto Sans目录名是URL编码后的
Noto%20Sans%20Regular,记得把配置里的"Noto Sans Regular/$1"改成"Noto%20Sans%20Regular/$1",要和实际目录名完全一致。 - 确保Nginx进程有读取
/data/fonts/ofm/目录及所有子文件的权限,不然会出现权限错误。
备注:内容来源于stack exchange,提问作者hyperknot
相关产品推荐
相关产品推荐

