ドメインをcloudflareで購入した
github pagesからcloudflare pagesに移行した
ここで、github pagesはリポジトリをサブディレクトリとしてホストするのに対して、cloudflare pagesはサブドメインとしてホストする
これによりそのままリポジトリを紐付けるだけでは移行ができなかった
cloudflare workers 1つでこれを解決した
新規cloudflare workersを作成し、カスタムドメインとして購入したドメインのルートをサブドメイン無しで紐付ける
コードは以下の通り
const
d={
'petit.mcbeeringi.dev':'/petit',
'dotfiles.mcbeeringi.dev':'/dotfiles',
'mcbeeringi.github.io':'/ghp',
'pages.mcbeeringi.dev':''
};
export default{
fetch:req=>(async(
r2u=x=>new URL(x.url),r=r2u(req),rp=r.pathname,li=Object.entries(d),
rd=(x,{le='',tr='',q=x})=>new Response(null,{status:301,headers:{Location:le+x.pathname+tr+q.search+q.hash}})
)=>li.reduce((a,[,x])=>a||x==rp,0)?rd(r,{tr:'/'}):
(x=>x.redirected?rd(x=r2u(x),{le:d[x.hostname],q:r}):x)(await fetch(new Request(
li.reduce((a,[i,x])=>a||new RegExp(`^${x}/`).test(rp)&&'https://'+i+rp.slice(x.length),''),{...req}
)))
)()
};
プロキシしたいディレクトリと宛先を定義、
合致した場合は宛先にリクエストを飛ばしてそのレスポンスを横流しする
リクエストがディレクトリそのものを指定かつ末尾に/が無い場合は/をつけるリダイレクトを返す(これが無いとurlの整合が取れない)
宛先にてリダイレクトが発生した場合はリダイレクト先を301で返す
searchやhashはリクエストそのままをレスポンスにつける
かれこれ1ヶ月ほど問題なく動作している
参考までに