文章

如何使用 Cloudflare Pages 自建短链接服务?

短链接是什么?

短链接又称短网址,意思就是比较短的网址。短链接服务通过将一个冗长的网址转换成一个短网址。

短链接服务通常会提供以下功能:

  • 生成短链接:用户可以输入长 URL 地址,短链接服务会自动生成相应的短链接。
  • 跳转到原始URL:当用户访问短链接时,短链接服务会将其重定向到原始URL。
  • 统计访问数据:短链接服务通常会提供访问短链接的次数等统计数据。

短链接有什么优点和缺点?

短链接通常由以下优点:

  • 易于记忆和传播:短链接通常只包含几个字符,因此很容易记忆和传播。
  • 美观:短链接通常更加美观,尤其是在社交媒体上发布时。
  • 节省空间和流量:在推特、微博、微信公众号、短信等限制字数的应用中,短网址可以缩短字符,规避掉这些限制,节省空间和流量。

但是,使用短链接也存在一些风险,比如可能被用于欺骗或钓鱼,因为用户无法直接看出短链接的目标网站是什么。

自建短链接服务

本文使用 Cloudflare Pages 提供的免费服务,自建短链接服务。免费版本支持每天 10 万次请求,日常使用已足够。

前提条件:

  • 一个 GitHub 账号
  • 一个 Cloudflare 账号
  • 一个短域名托管到 Cloudflare

Step 1: Fork linklet 仓库

仓库地址:https://github.com/harrisonwang/linklet

Step 2: Cloudflare 控制台配置

1.创建并部署 Pages 应用

登录 Cloudflare 控制台,依次点击 Workers & Pages > Create application > Pages > Connect to Git,选中 Fork 的仓库完成部署。

2.创建 D1 数据库

依次点击 Workers & Pages > D1 > Create database > Dashboard 进入 D1 控制台页面,输入 Database name 点击 Create 完成数据库的创建。

然后,点击 Console输入以下命令完成表的创建:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
DROP TABLE IF EXISTS links;
CREATE TABLE IF NOT EXISTS links (
  `id` integer PRIMARY KEY NOT NULL,
  `url` text,
  `slug` text,
  `ua` text,
  `ip` text,
  `status` int,
  `create_time` DATE
);
DROP TABLE IF EXISTS logs;
CREATE TABLE IF NOT EXISTS logs (
  `id` integer PRIMARY KEY NOT NULL,
  `url` text ,
  `slug` text,
  `referer` text,
  `ua` text ,
  `ip` text ,
  `create_time` DATE
);

3.配置 Pages 应用

接着点击进入部署完成的 linklet 项目,在 Cloudflare 控制台依次点击Settings > Functions > Add bindings,并输入 Variable name 值,选择 D1 Database,点击 Save 保存,设置如下表:

Variable nameD1 database
DBlinklet

为了生效 D1 数据库配置,需 Cloudflare 控制台重新部署 Pages 应用。

Step 3: 绑定短域名

在 Cloudflare 控制台依次点击 Workers & Pages > linklet > Custom domains > Set up a custom domain,输入要绑定的短域名点击提交完成域名绑定。

Step 4: 网页方式使用

打开 wss.so 页面,输入要转换的长网址,点击 生成 后的短链接如下图所示:

生成的短链接

Step 5: API 方式使用

请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
### 生成随机短链接
POST https://wss.so/create
Content-Type: application/json

{
  "url": "https://ollama.com/blog/how-to-prompt-code-llama"
}

### 生成指定 slug 短链接
POST https://wss.so/create
Content-Type: application/json

{
  "url": "https://ollama.com/blog/how-to-prompt-code-llama",
  "slug": "llama"
}

响应:

1
2
3
4
{
  "slug": "<slug>",
  "link": "http://wss.so/<slug>"
}
本文由作者按照 CC BY 4.0 进行授权