Docker环境下Caddy 2.4.6 file_server browse指定目录访问404问题求助
Caddy 2.4.6 中 /files 路径返回404的解决方案
我来帮你解决这个Caddy路由匹配的问题——你遇到的404是因为路由规则的匹配范围没覆盖到/files这个路径。
问题原因
你的Caddyfile里写的file_server /files/*,这个路径匹配规则只会匹配以/files/开头的请求(注意结尾的斜杠)。当你访问aruiplex.com/files(不带结尾斜杠)时,这个请求不在该规则的匹配范围内,会直接落到最后那个根目录为/srv的file_server规则里,而/srv下并没有files相关资源,所以返回404错误。
两种可行的解决方案
方案1:添加重定向,让不带斜杠的/files跳转到带斜杠的版本
修改后的Caddyfile如下:
aruiplex.com { encode gzip # 将不带斜杠的/files重定向到/files/,确保匹配到后续的file_server规则 redir /files /files/ file_server /files/* { root /files browse } reverse_proxy /api/* localhost:7022 file_server { root /srv } }
这样用户访问aruiplex.com/files时,会自动跳转到aruiplex.com/files/,此时就会被/files/*的规则匹配,正常展示/files目录下的文件列表。
方案2:使用匹配器明确覆盖/files和/files/*路径
如果你不想做重定向,可以用Caddy的命名匹配器来同时匹配/files和/files/*:
aruiplex.com { encode gzip # 定义匹配器,同时匹配/files和所有/files/开头的路径 @files path /files /files/* file_server @files { root /files browse } reverse_proxy /api/* localhost:7022 file_server { root /srv } }
这种方式更直接,不管用户访问/files还是/files/xxx,都会被匹配到对应的file_server规则,直接返回预期的文件列表或文件内容。
验证效果
修改配置后重启Caddy服务,你会发现:
- 访问
aruiplex.com依然返回/srv下的index.html - 访问
aruiplex.com/files或aruiplex.com/files/都能正常展示容器内/files目录的文件列表 - 访问
aruiplex.com/api开头的路径依然会转发到localhost:7022
内容的提问来源于stack exchange,提问作者Aruix
相关产品推荐
相关产品推荐

