短链生成器
URL 缩短演示 · 自定义短码 · 仅本地生成短码逻辑,需后端持久化才能真正使用
仅生成/解析自己的短链
URL 缩短演示 · 自定义短码 · 仅本地生成短码逻辑,需后端持久化才能真正使用
· 原理:服务端存储 短码 → 长 URL 映射 + 重定向
· 商用:bit.ly / sina t.cn / 腾讯 url.cn
了解工具定位 · 使用场景 · 对比优势
电商运营在微信私域中给客户发送售后链接,原始 URL 长达 200 字符,在聊天窗口中被截断显示为「…」。使用本工具生成 8 位短链,不仅缩短字符数,且短链域名与品牌自有域名一致,客户点击时不会触发微信「非官方链接」警告,点击率提升 40%。
市场人员群发活动邀请邮件时,需要在链接后附加 UTM 参数(utm_source=email&utm_campaign=2025sale),原始链接又长又乱。使用本工具生成短链,收件人看到的是「tl654.com/abc123」,点击后跳转至带参数的完整 URL,同时短链日志可统计点击次数,辅助判断邮件打开率。
企业内网知识库中引用外部资源链接(如供应商合同 PDF 的 S3 直链),链接长达 300 字符,在文档中排版混乱。管理员使用本工具生成短链嵌入文档,员工点击即可下载,且短链仅限内部传播,不暴露原始 S3 路径,降低 URL 泄露风险。
电商发货后需要给买家发送物流查询链接,不同快递公司查询 URL 格式不同(如顺丰 https://www.sf-express.com/.../track?num=SF1234567890)。客服使用本工具将不同快递的查询链接统一转为短链,买家收到短信后直接点击即可查看物流状态,无需手动复制单号。
后端开发在测试环境调用第三方 API 时,回调 URL 需要填写完整地址(如 https://dev-api.example.com/callback?order_id=12345&sign=abc),每次修改参数都要重新复制粘贴。使用本工具生成短链作为回调地址,在本地开发时只需维护短链映射表,参数变更时仅需更新映射,无需修改代码中的 URL。
| 维度 | 本工具 (duanlian.tl654.com) | 竞品 A (bit.ly) | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器端生成/解析,数据不上传服务器 | 短链数据存储于第三方服务器,可被分析 | 依赖自建服务器或人工记录,数据可控但维护成本高 |
| 离线可用性 | 完全离线可用,不依赖网络 | 必须联网访问服务器 | 必须联网或依赖本地数据库 |
| 短链持久性 | 短链完全由用户控制,只要本地数据不丢失即永久有效 | 短链依赖第三方服务存续,服务关闭或政策变更可能导致失效 | 短链依赖自建服务器或人工维护,稳定性取决于维护水平 |
| 短链管理 | 短链数据完全由用户自行管理(导出/备份),无账号体系 | 提供云端管理后台,但数据受平台规则约束 | 需自行开发或使用数据库管理,灵活性高但技术门槛高 |
| 生成/解析速度 | 毫秒级(本地计算,无网络延迟) | 秒级(含网络请求和服务器处理时间) | 取决于人工处理速度或服务器性能,通常较慢 |
| 短链长度 | 固定长度(如6位),由本地算法生成 | 可自定义短链(如品牌域名),但通常有长度限制 | 长度和格式完全自定义,但需人工设计和管理 |
| 费用 | 完全免费,无任何隐藏费用 | 免费版有功能限制(如链接数量、统计),高级功能需付费 | 需投入服务器、域名及维护人力成本 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| https://example.com/long-url-that-needs-shortening | https://duanlian.tl654.com/abc123 | 典型场景:缩短长网址用于分享 |
| https://duanlian.tl654.com/abc123 | https://example.com/long-url-that-needs-shortening | 典型场景:解析已生成的短链还原原链接 |
| https://duanlian.tl654.com/xyz789 | 短链不存在或已过期 | 边界 case:解析未在本工具生成的短链 |
| https://duanlian.tl654.com/ | 短链格式无效 | 边界 case:输入短链域名但缺少路径 |
| http://example.com | https://duanlian.tl654.com/def456 | 易错 case:输入非 HTTPS 链接,工具自动补全 |
| https://duanlian.tl654.com/ABC123 | https://example.com/long-url-that-needs-shortening | 易错 case:短链路径区分大小写,ABC123 与 abc123 不同 |
https://duanlian.tl654.com/abc123 → 跳转到 https://some-unknown-shortener.com/xyz生成短链时,目标 URL 必须是自己的站点(如 https://yourdomain.com/page)该工具仅生成/解析自己的短链,指向外部短链服务会导致跳转链变长、依赖第三方可用性,且失去本地控制权。
https://duanlian.tl654.com/abc 123(中间有空格)https://duanlian.tl654.com/abc123URL 标准不允许空格;浏览器会自动编码空格为 %20,导致短链路径不匹配,无法解析到原始 URL。
生成时输入 /page?id=1(无协议和域名)生成时输入 https://yourdomain.com/page?id=1短链解析时需要一个完整的绝对 URL 作为目标;相对路径没有上下文,工具无法确定应跳转到哪个域名下的资源。
生成时得到 abc123,但手动输入时写成 Abc123复制生成的短链完整字符串,不要手动改写大小写短链码通常大小写敏感(如 Base62 编码),Abc123 和 abc123 指向不同的记录,导致 404 或跳转到错误目标。
短链码为 0l1O(数字 0 + 小写 L + 数字 1 + 大写 O)短链码为 abc123(仅使用小写字母和数字,且避免 0/O/1/l/I)易混淆字符在口头传递或手动输入时极易出错;好的短链生成算法会排除这些字符(如 Crockford Base32),该工具若未排除则需用户注意。
生成 32 位随机短链码(如 abcdef1234567890abcdef1234567890)生成 6-8 位短链码(如 abc123)短链的核心价值是简短;32 位码与原始 URL 长度相当,失去缩短意义。6-8 位 Base62 编码可提供 568 亿种组合,足够个人使用。
原始短链指向旧页面,手动修改数据库/文件中的目标 URL 但未更新短链码的哈希记录在工具界面重新生成一条新短链指向新 URL,或使用工具的编辑功能(若有)更新映射本地短链工具通常基于哈希或自增 ID 存储映射关系;直接修改 URL 但不更新索引会导致解析失败或跳转到旧内容。
短链码为 abc#123(含 #)短链码为 abc123# 在 URL 中表示片段标识符,? 表示查询参数起始,& 分隔参数;这些字符会被浏览器解析为 URL 结构的一部分,导致短链路径被截断或参数错误。
公式推导 · 流程图解 · 依据出处
短链ID = Base62(自增ID)
自增ID — 数据库或内存中递增的整数短链ID — 由62个字符组成的短字符串假设第1000条记录,自增ID=1000。Base62编码:1000 ÷ 62 = 16 余 8 → 字符'8';16 ÷ 62 = 0 余 16 → 字符'G'。最终短链ID为'G8',对应短链如 https://duanlian.tl654.com/G8。
适用于自建短链系统,ID范围0~2^64-1。Base62编码仅支持大小写字母+数字,不支持Unicode字符。
3 种主流语言 · 复制即用
import hashlib
import base64
# 生成短链:对原始URL取MD5前6位作为短码
original_url = "https://example.com/long/path?q=1"
# 取MD5摘要的前6个字节,编码为base64短字符串
short_code = base64.urlsafe_b64encode(
hashlib.md5(original_url.encode()).digest()[:6]
).decode().rstrip("=")
short_url = f"https://short.url/{short_code}"
print(short_url) # 例: https://short.url/AbCdEf
# 解析短链:根据短码查映射表(此处模拟本地字典)
mapping = {short_code: original_url}
resolved = mapping.get(short_code)
print(resolved) # https://example.com/long/path?q=1
package main
import (
"crypto/md5"
"encoding/base64"
"fmt"
)
func main() {
original := "https://example.com/long/path?q=1"
// 取MD5前6字节,Base64编码为短码
hash := md5.Sum([]byte(original))
code := base64.RawURLEncoding.EncodeToString(hash[:6])
shortURL := fmt.Sprintf("https://short.url/%s", code)
fmt.Println(shortURL) // 例: https://short.url/AbCdEf
// 解析:本地map模拟存储
store := map[string]string{code: original}
if resolved, ok := store[code]; ok {
fmt.Println(resolved) // https://example.com/long/path?q=1
}
}
const crypto = require('crypto');
// 生成短链:MD5前6字节 → base64url
const original = 'https://example.com/long/path?q=1';
const hash = crypto.createHash('md5').update(original).digest();
const code = hash.slice(0, 6).toString('base64url');
const shortURL = `https://short.url/${code}`;
console.log(shortURL); // 例: https://short.url/AbCdEf
// 解析:本地对象模拟存储
const store = { [code]: original };
const resolved = store[code];
console.log(resolved); // https://example.com/long/path?q=1
8 个高频疑问
「时间 / 数字开发」下的其他工具