S3静的ウェブサイトのインデックス解決をCloudFront Functionsで修正
CloudFlareからブログを移行した際に、パスの指定で問題がでていたので修正しまし た。
By Toshiyuki Yoshida
メインブログを Cloudflare から AWS S3 へと移行した際、 S3 の Block pubic access をオフ、Static website hosting をオンにしていたので、 CloudFront が S3 の REST API エンドポイントを使用するよう修正しました。
この場合 CloudFront はサブディレクトリの index.html ファイルを自動的に解決できないので、以下の URL のパスを適切に変換する CloudFront Functions を追加しました。
ありがちな事ですね。
function handler(event) {
var request = event.request;
var uri = request.uri;
// URIが/で終わる場合、index.htmlを追加
if (uri.endsWith("/")) {
request.uri += "index.html";
}
// 拡張子がない場合もindex.htmlを追加
else if (!uri.includes(".")) {
request.uri += "/index.html";
}
return request;
}