域名无需在Cloudflare托管,但是DNS必须使用Cloudflare以便接管。
此方法适用场景:
- 仅有一台国内服务器;(如果你还有海外备案服务器直接做301不香吗,此方案的优点在于无需另购服务器直接301到国内已备案域名)
- 拥有已备案可访问域名和其他未备案域名;
- 需要把未备案域名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跳转……
还是,本方法只适用于仅仅仅有一台国内服务器的……其他场景请直接忽略本文……
文中方法仅供记录自用,如需使用请在遵守相关法律法规的前提下进行……
以上内容中的代码来源于网络,由于出处众多,无法判定哪处是首发,故不做来源链接……
版权声明:武志红将《利用CF的Worker把未备案域名指向已备域名》原创发表于『武志红的杂货铺』,链接地址:https://www.imwzh.com/archives/135.html。本站内容仅为个人生活杂记,谢绝任何形式的转载。