静的ウェブサイトホスティングオプションを使用してAmazon S3で静的ウェブサイトをホストしているので、S3は、index.htmlファイルを明示的に指定せずにフォルダーをレンダリングします。
たとえば、ここに私のS3バケット内のページへの直接リンクがあります: http://new.rdegges.com.s3-website-us-east-1.amazonaws.com/category/2009/ =ご覧のとおり、そのURLにアクセスすると、Amazon S3はそのディレクトリ内にindex.htmlファイルを自動的にレンダリングし、クリーンなURLを取得できるようにします。
これはすべてS3で正常に動作します。私が抱えている問題は、Amazon Cloudfrontがこの動作も適切に処理できるようにすることです。 S3バケットをオリジンとして指定してCloudfrontディストリビューションを作成し、 'index.html'をルートとして使用するように指示すると、S3が持っているindex.htmlの動作がまったく機能しなくなります。
たとえば、Cloudfrontでの上記と同じURLは次のとおりです。 http://d1mj00c6pby3gc.cloudfront.net/category/2009/
残念ながら、上記のURLは機能しませんが、手動でインデックスファイルを指定すると、たとえば、次のように機能します http://d1mj00c6pby3gc.cloudfront.net/category/2009/index.html
私の質問は、私のWebサイトのS3バケット設定を尊重するようにCloudfrontを構成するにはどうすればよいですか?
S3ウェブサイトの機能は、Amazon CloudFrontと組み合わせて使用できます。ただし、S3 Webサイトは通常のS3バケットとは異なるドメイン名を使用します。この場合、CloudFrontディストリビューションのOrigin構成のOrigin Domain Name
をnew.rdegges.com.s3-website-us-east-1.amazonaws.com
に設定する必要があります。
このURL(エンドポイント)は、S3のStatic Website Hostingパネルから取得できます。
CloudFrontがS3ウェブサイトのドメイン名を指すようになると、S3ウェブサイトの機能が動作するはずです。
受け入れられた回答にいくつかのことを追加したいと思います。
まず、クラウドの前面にDefault Root Object
があることを確認してください。 documentation で指定されているように、これはsubdirectories
には適用されません。
Cloudfrontの新しいディストリビューションをセットアップするときに、バケットbucket-name.s3.amazonaws.com
を選択できます。リージョンはURLで指定されていないことに注意してください。あなたがする必要があるのは、s3から静的サイトのURLを取得し、それをOrigin url
として使用することです(リージョンはそこにあります)。
これはゲームの後半になるかもしれませんが、 Lambda @ Edge をチェックしてください。拡張子なしでOrigin Requestsをインターセプトし、それらをフォルダー内のindex.htmlドキュメントにポイントできます。これらの結果はキャッシュされるため、Lambdaは新しいリクエストを受け取ったときにのみ実行されます。