如何搭建短链接服务
短链接服务会把一个很长的网址存储在一个短码之下,并将访问短链接的人重定向到原始地址。它的核心非常简单:一张数据表和一条重定向路由,因此它是经典的入门项目。真正让它变得实用的,是其余的部分:短域名、自定义别名、点击次数统计、修改链接指向,以及防止垃圾邮件发送者利用你的域名隐藏钓鱼链接。尽早决定它是只供你和团队使用,还是对公众开放,因为公开的短链接服务很快就会招来滥用。
短链接服务需要什么
数据
| 数据表 | 字段 |
|---|---|
| 链接 | 短码、目标网址、所有者、标题、创建日期、启用标记、可选的过期时间 |
| 点击 | 所属链接、时间、来源页面、国家、设备类型 |
| 域名(可选) | 自定义短域名及其所有者 |
为短码建立唯一索引。两个链接使用相同的短码,是必须绝对避免的唯一一种错误。
页面与路由
- 重定向路由 ——
/{code}查找短码并进行重定向。这是大多数访问者唯一会接触到的路由,因此它必须快速,并且绝不能显示你应用的界面。 - 创建链接 —— 粘贴网址,可选择自定义别名,然后获得带复制按钮的短链接。
- 链接列表 —— 你的链接,包含点击次数、搜索功能以及启用/停用开关。
- 链接详情 —— 随时间变化的点击量、主要来源页面、国家、设备。可编辑目标地址。
- 未找到页面 —— 用于显示未知或已停用的短码。
- 二维码 —— 每条链接都可以生成,添加成本低,而且经常被需要。
决策与权衡
重定向类型。 301(永久)重定向可能会被浏览器缓存,因此回访者会跳过你的服务器:你会丢失点击数据,也无法为他们更改目标地址。如果你需要统计点击或允许编辑,请使用 302 或 307。大多数带统计功能的短链接服务都是这样做的。
短码。 由六到七个字符(字母和数字)组成的随机短码难以被猜到,并且有足够大的空间。如果人们需要手动输入链接,应避免容易混淆的字符(0/O、1/l)。按顺序生成的短码会暴露你拥有多少链接,并让任何人都能逐个遍历。
自定义别名。 /launch 比 /x7Kp2q 更好。应保留你的应用正在使用的词(login、api、admin),如果工具对外开放,还应屏蔽不当的别名,并决定别名是否区分大小写。不区分大小写对用户更友好。
速度。 短链接服务会在每次访问前增加一次跳转。应让重定向路由只执行一次有索引的查询,并且在发送重定向之后再记录点击(或在后台进行),这样统计就不会拖慢访问者的速度。托管在闲置时会休眠的环境中,应用在长时间无人访问后的首次访问可能会稍慢;对于个人或团队工具来说,这通常可以接受。
点击统计与隐私。 统计点击次数、来源页面和大致国家是常规做法。存储完整的 IP 地址并为个人建立画像,则会触发隐私法规的适用。只存储你真正会查看的内容,并尽可能进行汇总。参见如何为应用添加分析功能。
域名。 链接的简短程度取决于它的域名。购买一个短域名并将其指向应用——参见如何连接自定义域名。许多托管服务更倾向于使用子域名(go.yourbrand.com)而不是裸根域名,因为子域名更容易连接。
滥用。 如果任何人都能创建链接,垃圾邮件发送者就会利用你的域名伪装钓鱼和恶意软件,你的域名也可能被列入黑名单。对于公开的短链接服务,应要求注册账户,限制创建频率,使用 Google Safe Browsing 等恶意网址名单检查目标地址,屏蔽指向你自己短链接服务的链接(避免重定向循环),并建立一个管理员开关,能够立即停用任何链接。私有的、仅供团队使用的短链接服务可以避免大部分这些问题。
一个行之有效的首个提示词
为我的团队搭建一个短链接网页应用。已登录用户粘贴目标网址后,会获得一个随机的 7 字符短码(不含 0、O、1 或 l),或者可以选择自定义别名。别名需唯一且不区分大小写;保留 login、api、admin、app 和 settings。公开路由 /{code} 通过一次有索引的查询查找短码,并返回 302 重定向;记录点击(时间、来源页面、国家、设备类型——不记录完整 IP 地址),且记录操作不得延迟重定向。未知或已停用的短码显示一个简单的未找到页面。用户可以看到自己的链接列表(包含点击次数),可以编辑目标地址、停用链接、下载二维码,并可打开详情页查看每日点击量、主要来源页面和国家。验证目标地址必须是 http 或 https 网址,并且不能指向本短链接服务自身。所有数据存储在数据库中。
搭建步骤
- 创建与重定向。 创建一条链接,并在无痕窗口中打开。检查返回的是 302,而不是先加载页面再通过 JavaScript 跳转。
- 短码与别名。 尝试重复的别名、保留词、大小写混合的别名以及一个很长的网址。
- 点击追踪。 从几台设备上点击,检查次数和来源页面统计。
- 编辑与停用。 修改目标地址,确认旧的短链接现在会指向新地址;停用一条链接,确认它不再生效。
- 校验。 尝试
javascript:链接、指向短链接服务自身的链接以及格式错误的网址。这些都应在服务器端被拒绝。 - 域名。 连接你的短域名,并在其上测试链接。
- 滥用防护(如果工具将对外公开):速率限制、目标地址检查,以及一个可以查看最近链接的管理员页面。
常见错误
- 使用 301 重定向却还要统计点击。 浏览器会缓存这些重定向,你的数据就会出错。
- 在页面中再进行重定向。 先加载应用,再用 JavaScript 跳转,每次点击都会感觉很慢。应在服务器端进行重定向。
- 短码没有唯一约束。 冲突迟早会发生。
- 没有任何控制措施的公开短链接服务。 它一定会被滥用,而你的域名信誉也会因此受损。
- 接受任意的网址协议。 只允许 http 和 https 目标地址。
- 迁移时丢失链接。 自己拥有短域名,这样即使更换托管服务,链接也能保持可用。
什么时候现成的产品是更好的选择
成熟的链接管理服务开箱即提供品牌域名、详细的分析、团队功能、二维码、集成和滥用处理。如果链接对你的营销至关重要,并且你不想维护任何东西,那就付费使用一个。
当你希望在自己的域名上拥有一个简单的团队短链接服务,且不需要按席位付费;当链接需要与你自己的产品相连(分享链接、推荐链接、邮件中的追踪链接);或者你希望完全掌控点击数据时,再考虑自建。它也是很好的第一个后端项目。可以将它与链接聚合页面搭配使用,并在向任何人开放之前,先完成 AI 构建应用的安全检查清单。
在 Mythex 上搭建
在 Mythex 中,你可以在对话里描述短链接服务,并在实时预览中测试重定向。当应用需要时,Mythex 会为链接和点击添加专用的数据库。已发布的应用及其数据库在闲置时会休眠,并在下次访问时唤醒,这使得一个不常使用的短链接服务运行成本很低。可以发布到 mythex.ai 链接;在 Pro 套餐中,你可以连接自己的短域名,也可以在 Mythex 内购买一个——参见自定义域名。短链接服务模板提供了一条现成的起始提示词,包含自定义别名和点击统计功能。
常见问题
短链接服务应该使用 301 还是 302 重定向?
301 告诉浏览器这次跳转是永久性的,因此浏览器可能会缓存它,下次直接跳过你的服务器,这意味着你会丢失点击数据,也无法修改链接指向。大多数需要统计点击或允许编辑的短链接服务使用 302 或 307 临时重定向。
短码是如何生成的?
可以是由字母和数字组成的随机字符串,并与已有的短码进行比对;也可以是将数据库 ID 以 62 进制编码。随机短码更难被猜到;按顺序生成的短码会暴露你有多少条链接。六到七个随机字符就能组合出数十亿种可能。
我需要短域名吗?
功能上不需要,但短链接服务的意义就在于提供简短、可信的链接。你自己拥有的短自定义域名还意味着,即使你更换托管服务,链接也能继续使用。
如何防止有人滥用公开的短链接服务?
要求注册后才能创建链接,对链接创建频率做限制,使用 Google Safe Browsing 等恶意网址名单检查目标地址,禁止将你自己的域名作为目标地址,并为自己准备一种快速停用链接的方法。