このブログはS3 + Cloudfrontで公開していますが、存在しないページに接続すると403が表示されるので、エラーページを表示するように設定する。

403より404が適切な気がしますが、接続時にCloudfrontでキャッシュにファイルが存在しないためS3に取りに行くがファイルが存在しないのでアクセスが拒否され403が返っていると思われます。

エラーページを作りS3とCloudfrontでエラーページを設定します。

hexoでerrorページを追加

sourceディレクトリにerror.mdを追加するだけです。
タイトルに設定した文字列が表示されるだけのページです。

$ vi source/error.md
title: "お探しのページまたはファイルが見つかりませんでした。"
date: 2016-02-12 02:12:18
---

いたるところにホームに戻るボタンがあるので特に何も書かずシンプルな感じにしておきます。

S3とCloudfrontの設定

S3

S3のBucketの設定で”ウェブサイトのホスティングを有効にする”のエラードキュメントに作成したerror.htmlを設定する。

Cloudfront

CloudfrontのDistributionsのErrorPagesに403に対応する設定を追加する。ユーザからは404で見えてほしいので403エラーが発生したら404を返す設定をして/error.htmlを表示するように設定する。

ErrorCode TTL ResponsePagePath ResponseCode
403 300 /error.html 404

確認

設定後ブラウザから存在しないページにアクセスすると404で/error.htmlが表示されることが確認できる。

参考

  1. https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/HTTPStatusCodes.html