- 所有文章/
一个可自托管的静态短链接应用
本文目录
前言 #
网络上有很多可以公开使用的短链接网站,但由于被滥用或其他原因不适合作为稳定的服务来使用。
前段时间注册了域名 xvo.es,还算短,打算弄个自用的链接缩短服务。尝试了一些可以自托管的短链接服务之后,我选择了 kutt 并使用了一段时间。然而 kutt 于我而言还是太「庞大」了,我想寻找一个更简单的链接缩短应用。
链接缩短程序运作原理是依靠 HTTP 重定向,那我们为什么不借助静态托管平台的批量重定向功能来实现呢?
启发 #
灵感来自基于 C 语言的链接缩短程序 1,我们使用静态部署即可实现个人短链接服务
.
├── 404.html # 404 页面
├── _redirects # Cloudflare Pages 重定向配置
├── index.html # 主页面
├── lists.html # 短链接罗列页面
└── vercel.json # Vercel 重定向配置
项目地址: https://git.xvo.es/xvo.es/
这是一个可自托管的最简单链接缩短程序,能实现我想要的简单特性:
- 纯静态部署,易于维护且足够稳定
- 无需数据库和 Serverless 函数即可运行
- 服务完全由自己掌控,不必担心滥用
部署 #
程序很简单,本文以 Cloudflare Pages 和 Vercel 为例,理论上它适合其他各种支持批量 URL 重定向的静态托管平台
Cloudflare Pages #
Cloudflare Pages 的单个项目支持 2,000 个静态重定向和 100 个动态重定向,每个重定向声明有 1,000 个字符的限制。格式错误的声明会被忽略。
Fork 项目源码,修改 _redirects
文件里的重定向规则,写法如下:
[源 URL] [目标 URL] [状态码]
# [状态码是可选的,默认 302]
- 302 临时重定向
- 301 永久重定向
比如:
/blog https://dejavu.moe 302
/pgp https://pgp.dejavu.moe 302
/github https://github.com/DejavuMoe 302
修改 lists.html
文件,这里罗列我们的短链接,你可以将自己使用的短链接写在这里,比如:
<pre><code>URL lists:<a href="/blog"> /blog </a>|<a href="/pgp"> /pgp </a>|<a href="/github"> /github </a>|<a href="/telegram"> /telegram </a>|<a href="/group"> /group </a></code></pre>
将修改后的项目部署到 Cloudflare Pages
Vercel #
Vercel 的单个项目最多支持 1,024 个重定向,源 URL 和目标 URL 的最大长度为 4,096
fork 项目源码,修改 vercel.json
文件里的重定向规则,写法如下:
{
"redirects": [
{
"source": "源 URL 1",
"destination": "目标 URL 1",
"permanent": false
},
{
"source": "源 URL 2",
"destination": "目标 URL 2",
"permanent": false
}
]
}
其中 permanent
可以为 true
(永久重定向) 或 false
(临时重定向),比如:
{
"redirects": [
{
"source": "/blog",
"destination": "https://dejavu.moe",
"permanent": false
},
{
"source": "/pgp",
"destination": "https://pgp.dejavu.moe",
"permanent": false
},
{
"source": "/github",
"destination": "https://github.com/MoeOffice/xvo.es",
"permanent": false
},
{
"source": "/telegram",
"destination": "https://t.me/dejavuBlog",
"permanent": false
},
{
"source": "/group",
"destination": "https://t.me/dejavuGroup",
"permanent": false
}
]
}
同理,修改 lists.html
文件里罗列的短链接,然后将项目部署到 Vercel 即可。
可选 #
此外,如果服务使用顶级域名 (Apex Domain),比如 xvo.es
,建议将 www.xvo.es
重定向到 xvo.es
。Cloudflare 可以使用「页面规则」中的 Bulk Redirects Rules 实现, Vercel 可以直接在绑定域名里设置重定向,现在这个极其简单的个人短链接服务就可以使用啦。
参考资料