该服务提供短链接生成、删除、查询、重定向与简单代理功能。
- 需要绑定
short_link_kvKV 命名空间 - 可配置环境变量
SECRET(默认值admin) - 静态资源由
env.ASSETS提供
GET /GET /ipPOST /shortDELETE /shortGET /short?code=...GET /<shortCode>GET /http://...或GET /https://...
- 功能:重定向到
/index - 响应:302 重定向
- 功能:返回当前 Worker 的出口 IP
- 响应内容:纯文本 IP 地址
- 示例:
GET /ip- 返回:
123.45.67.89
- 功能:生成短链接
- 请求方式:
POST - 请求体:
form-data或application/x-www-form-urlencoded - 参数:
url:必须,目标长链接expire:可选,过期时间,格式如YYYY-MM-DDTHH:mm- 如果未提供,默认使用
9999-12-31T23:59
- 如果未提供,默认使用
- 处理逻辑:
- 生成随机短码(6 位字符)
- 将
{url, expired, visits: 0}存入short_link_kv
- 返回示例:
{ "status": 200, "shortCode": "abc123", "url": "https://example.com", "exp": "2026-12-31T23:59" } - 错误:若请求体解析失败或 URL 无效,则返回错误信息
- 功能:删除短链接
- 请求方式:
DELETE - 请求头:
secret:必须,和env.SECRET对比
- 请求体:
form-datacode:可选,要删除的短码
- 处理逻辑:
- 如果
code存在,删除指定短码 - 如果
code不存在,删除所有键
- 如果
- 返回示例:
- 删除指定项:
已删除 - 删除全部:
全部删除 - 授权失败:
Authorization error
- 删除指定项:
- 注意:当前实现会将返回值和
code拼接返回
- 功能:查询短链接信息
- 请求方式:
GET - 参数:
code:短码
- 处理逻辑:
- 成功返回短码对应的数据
- 如果未找到,返回
没找到链接
- 返回示例:
{ "status": true, "key": "abc123", "data": { "url": "https://example.com", "expired": 1750000000000, "visits": 0 } } - 如果不传
code:- 返回 KV 中的键列表 JSON
- 功能:短码重定向
- 请求方式:
GET - 路径参数:
<shortCode>:短码
- 处理逻辑:
- 从
short_link_kv读取对应值 - 若不存在或已过期,返回
null/ 继续尝试静态资源 - 若有效,则将
visits+1 并重定向到原始 URL
- 从
- 响应:
- 有效短链接:302 跳转到原始 URL
- 失效或不存在:继续返回静态资源页,若找不到则返回首页
- 功能:简单代理请求
- 说明:
- 当路径前缀以
/http://或/https://开头时,服务会将其视为代理目标 - 例如:
GET /https://example.com/path
- 当路径前缀以
- 处理逻辑:
- 直接转发请求到目标 URL
- 返回目标响应体
- 注意:
- 仅支持通过路径携带完整 URL 的情况
- 请求头与方法会被转发
- 生成短链:JSON 字符串
- 删除短链:文本信息
- 查询短链:JSON 字符串或提示文本
- 重定向:HTTP 302
- 代理:目标响应体
env.short_link_kv- 存储短链接数据
env.SECRET- DELETE 请求授权密钥
- 默认值:
admin
env.ASSETS- 静态资源挂载
curl -X POST https://your-domain/short \
-d "url=https://example.com" \
-d "expire=2026-12-31T23:59"curl "https://your-domain/short?code=abc123"curl -X DELETE https://your-domain/short \
-H "secret: admin" \
-d "code=abc123"curl -I https://your-domain/abc123curl "https://your-domain/https://example.com"shortCode由Math.random().toString(36).substring(2, 8)生成,长度为 6。- 过期判断使用
Date.now(),因此必须保证expire可被Date.parse()识别。 - 删除全部键时会遍历 KV 列表逐一删除。