Docker部署Caddy时如何将文件服务挂载到/license子路径
配置失效原因
- 路径匹配范围不足:你编写的
handle /license仅能精准匹配$MYDOMAIN/license这一个路径,无法覆盖/license/、/license/index.html、/license/static/css/app.css这类子路径请求,站点的静态资源、子页面都会直接返回404。 - 路径拼接逻辑错误:Caddy默认会把请求的URI路径拼接在root指定的目录后查找文件,当你访问
/license时,会实际查找/etc/license/license目录下的文件,但你的站点资源都直接存放在/etc/license根目录,自然找不到对应文件。
修复方案
使用handle_path指令替代普通handle即可,handle_path会自动剔除匹配到的路径前缀,不需要手动做URI重写,同时把匹配规则改为/license/*覆盖所有子路径,参考配置如下:
$MYDOMAIN { handle_path /license/* { root * /etc/license file_server } # 保留原有其他路由配置 }
如果配置后站点静态资源仍加载失败,检查站点内部是否使用了/开头的绝对路径引用资源,把这类资源引用改为相对路径(例如./static/css/app.css),或者统一加上/license前缀即可。
内容的提问来源于stack exchange,提问作者RailTracer
相关产品推荐
相关产品推荐

