无服务器实现 301 跳转(with Cloudflare)

原因

我想通过 git.batkiz.com 访问我的 Azure DevOps 主页,但其不支持 CNAME,同时我又不想通过服务器来 301 跳转,所以我就寻思着能不能找个方法白嫖。

下面是通过 Cloudflare 白嫖的教程。

完整步骤

新建 workers

workers 即 Cloudflare 推出的 serverless 云函数。在 主页 直接点击 workers 新建一个,名字随意,代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
async function handleRequest() {
  return Response.redirect(someURLToRedirectTo, code);
}
addEventListener("fetch", async (event) => {
  event.respondWith(handleRequest());
});
/**
 * @param {Request} url where to redirect the response
 * @param {number?=301|302} type permanent or temporary redirect
 */
const someURLToRedirectTo = "https://batkiz.visualstudio.com/";
const code = 301;

部署好之后即可通过其 workers.dev 域名访问了,其会在访问时 301 跳转到指定页。

可是 workers.dev 的域名太长了,也与最初的需求(通过 git.batkiz.com 访问我的 Azure DevOps 主页)不符。因此需要通过某种手段把此域名 CNAME 到 git.batkiz.com 这个域名上。

但云函数显然是没有 CNAME 这个说法的,所以需要借助其他路由来实现。

其他路由

dash 点进需要的域名设置,进入其 workers tab,选择添加路由即可。

路由示例:*git.batkiz.com/*,选择匹配的 worker 即可。

而后进入 dns 编辑页,给所用的域名(本例中为 git.batkiz.com)添加一个 A 记录,指向 192.2.0.1

然后就能用啦!


参考

  1. Setup Workers on Personal Domain
  2. https://developers.cloudflare.com/workers/about/routes/