一个使用 Cloudflare Pages、Pages Functions 和 D1 创建的 URL 缩短器。
演示站点:linklet.pages.dev
- 网页端生成短链接,支持随机 slug 和自定义 slug
- 短链接访问统计,记录来源、User-Agent 和 IP
- 独立管理后台
/admin,支持搜索、新增、编辑、启用/停用和删除链接 - 管理后台使用 Cloudflare 密钥
ADMIN_PASSWORD登录,不在公开页面提供入口
- Fork linklet 仓库。
- 登录 Cloudflare 控制台。
- 进入 Workers & Pages → Create application → Pages → Connect to Git。
- 选择 Fork 后的仓库并完成构建配置。本项目不需要构建命令,输出目录填写
/。
- 进入 Workers & Pages → D1 → Create database。
- 输入数据库名称,例如
linklet,点击 Create。 - 打开数据库控制台,执行
short.sql中的 SQL 创建数据表。
short.sql包含DROP TABLE,只用于首次初始化。已有数据的数据库不要重复执行。
进入 Pages 项目 Settings → Functions,添加 D1 绑定:
| Variable name | D1 database |
|---|---|
| DB | linklet |
进入 Settings → Environment variables,添加加密变量:
| Variable name | 值 |
|---|---|
| ADMIN_PASSWORD | 你的高强度管理员密码 |
也可以在项目目录使用 Wrangler 设置:
wrangler pages secret put ADMIN_PASSWORD --project-name <你的 Pages 项目名>设置或修改 ADMIN_PASSWORD 后必须重新部署项目,新的密钥才会生效。
部署完成后直接访问:
https://<你的域名>/admin
输入 ADMIN_PASSWORD 对应的密码即可登录。公开首页不显示后台入口,后台会话使用 HttpOnly、SameSite=Strict 的签名 Cookie,默认有效期 12 小时。修改 ADMIN_PASSWORD 后,所有旧会话会自动失效。
POST https://linklet.pages.dev/create
Content-Type: application/json
{
"url": "https://ollama.com/blog/how-to-prompt-code-llama"
}POST https://linklet.pages.dev/create
Content-Type: application/json
{
"url": "https://ollama.com/blog/how-to-prompt-code-llama",
"slug": "llama"
}slug 长度为 2-32 个字符,只允许字母、数字、下划线和连字符。admin、api、create 等系统路径为保留 slug。
响应:
{
"slug": "llama",
"link": "https://linklet.pages.dev/llama"
}- 安装依赖,并复制本地 Wrangler 配置:
npm install
cp wrangler.toml.example wrangler.toml仅本地开发时,wrangler.toml 中的 database_id 可以使用示例占位值;需要连接 Cloudflare 远程 D1 时,请替换为控制台中显示的真实 Database ID。
- 在项目根目录创建
.dev.vars(该文件已被 Git 忽略):
ADMIN_PASSWORD=local-admin-password- 初始化本地 D1 数据库并启动开发服务器:
npm run d1
npm run dev- 访问
http://localhost:8788/admin登录后台。