Caddy2 file server 自动重定向问题
一、事情起因
自打很多年前开始使用静态博客工具来发布博客,现在基本上博客源码编译后就是一堆 html 等静态文件;一开始使用 nginx 作为静态文件服务器,后来切换到的 Caddy2;不过最近在 Google Search Console 中发现了大量的无效链接,给出的提示是 “网页会自动重定向”。
经过测试后发现这些链接地址在访问时都会重定向一下,然后在结尾加上 /
;没办法我就开始探索这个 /
是怎么来的了。
二、源码分析
没办法,也不知道那个配置影响的,只能去翻 file server 的源码,在几经查找之后找到了以下代码(而且还带着注释):
从代码逻辑上看,只要 *fsrv.CanonicalURIs
这个变量为 true
,那么就会触发自动重定像,并在 “目录” 尾部补上 /
;注释里也说的很清楚是为了目录规范化,如果想看详细讨论可以参考那两个 issue。
三、解决方案
3.1、Admin API
翻了这个 *fsrv.CanonicalURIs
变量以后,突然发现 Caddyfile 里其实是不支持这个配置的;所以比较 low 的办法就是利用 Admin API,先把 json 弄出来,然后加上配置再。POST 回去:
{
"apps": {
"http": {
"servers": {
"srv0": {
"listen": [
":80"
],
"routes": [
{
"handle": [
{
+ "canonical_uris": false,
"handler": "file_server",
"hide": [
"./Caddyfile"
]
}
]
}
]
}
}
}
}
}
curl -XPOST http://localhost:2019/load -H "Content-Type: application/json" -d @caddy.json
3.2、升级版本
现在可以直接从 master 构建 Caddy,或者等待 v2.4.4
版本发布,这两种方式产生的 Caddy 二进制文件已经支持了这个配置选项,配置样例如下:
:80
file_server {
disable_canonical_uris
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 国际许可协议进行许可,转载请注明出处。