MENU

利用CF的Worker把未备案域名指向已备域名

January 10, 2022 • Read: 153 • 作死之秀阅读设置

域名无需在Cloudflare托管,但是DNS必须使用Cloudflare以便接管。

此方法适用场景:

  1. 仅有一台国内服务器;(如果你还有海外备案服务器直接做301不香吗,此方案的优点在于无需另购服务器直接301到国内已备案域名)
  2. 拥有已备案可访问域名和其他未备案域名;
  3. 需要把未备案域名301到已备案域名

以前建站只管做建站的项目,并未想着去做一个属于自己的后花园,直到19年才开始准备做自己的博客,虽然与我同名的同行并不多(即使如此,因为同名心理学家的影响,wuzhihong.com/.cn的域名我就不指望了),无奈去国外注册商的Namesilo 注册了wuzhihong.me的域名,虽然在微信场景内.me 域名无法直接访问,但当时的我还是挺知足。。。再往后因为香港服务器的到期,.me 域名在2017年7月之后也无法备案。再后来顺利注册 imwzh.com 并完成备案,这便是本站域名的由来。

当然原来的wuzhihong.me也没闲着,一直作为谷歌云盘的工具箱(部署方式参照:记一下 GoIndex 部署搭建) 。由于此搭建方法未部署实际程序,实际仅仅是跑 Worker 的JS。

废话不多说,直接开搞:

首先,你得准备好未备案域名,注册商其实无所谓国内国外,推荐直接使用Cloudflare直接注册,也可以在其他服务商处注册,然后把DNS解析服务改为CF提供的

去创建Worker服务,代码如下:

addEventListener('fetch', event => {
    event.respondWith(fetchAndApply(event.request));
})
async function fetchAndApply(request) {
    url = 'https://www.imwzh.com/' // 需要跳转到的地址
    return Response.redirect(url, 301)
}

当然了,以上只适用于一个域名的301,以下支持多个域名301

const rules = [{"oldurl":"www.wuzhihong.me","newurl":"www.imwzh.com"},{"oldurl":"wuzhihong.me","newurl":"imwzh.com"}];  // oldurl 填需要跳的,newurl填要跳的目标

async function handleRequest(request) {
  var url = request.url;
  for (var i = 0, l = rules.length; i < l; i++) {
    url = url.replace(rules[i].oldurl, rules[i].newurl);
  }
  return Response.redirect(new URL(url), 301);
}
addEventListener('fetch', async event => {
  event.respondWith(handleRequest(event.request))
});

以上两种方案根据自身需求直接复制到Worker保存

然后,需要在Worker添加路由,指向刚才创建的Worker(建议在域名后加 /*)

最后在CF的 DNS 中添加对应的解析,内容随意填(比如8.8.8.8),必须启用代理,收工。

后记,因为国外未备域名是无法CNAME到国内已备域名的,并且未备域名解析到国内服务器IP会被拦截,所以只能凑和做301跳转……

还是,本方法只适用于仅仅仅有一台国内服务器的……其他场景请直接忽略本文……

文中方法仅供记录自用,如需使用请在遵守相关法律法规的前提下进行……

以上内容中的代码来源于网络,由于出处众多,无法判定哪处是首发,故不做来源链接……

Archives QR Code Tip
QR Code for this page
Tipping QR Code