July 22, 2019
Scenario: You are hosting a S3 website, you want to apply SSL to it, so you used Cloudfront to create a HTTPs endpoint. However your website features subdirectories such as
/blog. With Cloudfront this would be an issue since it maps to the S3 bucket and thus does not follow S3 logic when mapping subdirectories. So even if
/blog on S3 has a
index.html file, the route on Cloudfront would return a
Object not found XML document.
There are two ways to fix this:
When creating the Cloudfront distribution for the web, AWS will auto fill S3 bucket names.
Instead of letting AWS autofill the S3 bucket. Just paste in the static S3 bucket endpoint.
So if you had
www.mysite.com.s3.amazonaws.com in Cloudfront. Replace it with
www.mysite.com.s3-website-us-west-2.amazonaws.com from S3.
The other way recommended by AWS Compute Blog is to used Lambda functions to implement default indexes in directories. The link covers the process fairly well bar some UI changes.