S3静的ウェブサイトのインデックス解決をCloudFront Functionsで修正
CloudFlareからブログを移行した際に、パスの指定で問題がでていたので修正しました。 メインブログを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;
}