• Stars
    star
    100
  • Rank 340,703 (Top 7 %)
  • Language
    JavaScript
  • License
    The Unlicense
  • Created almost 7 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Static website hosting on S3 via AWS Cloud Front with beautiful page URLs

What is this?

This is an AWS Lambda@Edge function to enable static website hosting on AWS S3 via CloudFront with beautiful page URLs without .html suffixes and without requiring other hacks.

What scenarios are supported?

  • Standard behaviour is adding a suffix like .html to URIs not ending width a slash (/).
  • Append a suffix like index.html to origin requests if the non-root request URIs ends with a slash, e.g. /some/directory/.
  • Redirect requests to non-root URIs ending with a slash (e.g. /some/directory/) to the same URI without the trailing slash (/some/directory).

How does it work?

Build and upload your HTML pages as usual with .html suffixes to S3 and access them or link to them without the suffix via CloudFront.

Whenever CloudFront needs to request an object from the origin (e.g. S3 bucket), this Lambda function will dynamically rewrite the request URI before it is forwarded to the origin. If a redirect is required the Lambda function will respond with the redirect without hitting the origin.

If the object is already cached by the CloudFront edge this function will not be triggered.

Configuration options

suffix ['string' | '' | false | null]

Recommended value: .html

Description: If defined, the given string (e.g. ".html") will be appended to request URIs ending with a suffix-less word.

Example: If the config value is set to .html the URI /some/page will be requested from the origin as /some/page.html. URIs ending in "/" are not affected.

appendToDirs ['string' | '' | false | null]

Recommended value: index.html

Description: If defined the given string will be appended to all non-root URIs ending with a slash.

Example: If the value for is set to index.html the URI /some/directory/ will be requested from the origin as /some/directory/index.html.

removeTrailingSlash [boolean]

Description: If true trailing slashes in a non-root request URI will be removed by responding with a 301 Moved Permanently redirect to the same URI without the trailing slash. The request will not hit the origin and the response may be cached.

Example: A request to /some/directory/ will be answered directly by the Lambda function with a redirect to /some/directory.

You can use either appendToDirs or removeTrailingSlash (or none of them). Using both options would not make sense. If appendToDirs is defined, removeTrailingSlash will be ignored.

Setup (in short)

  • Create a new Lambda function in the region us-east-1 (North Virginia) and a Node.js 6.10 environment.
  • Adjust the function code lambdaRewrite.js and/or its config options as required and upload (or copy-paste) it to your Lambda function.
  • Publish the Lambda function as a new version.
  • Add trigger "CloudFront", associate with the CloudFront distribution and the distribution's cache behaviour of your choice (e.g. "*") and select "Origin Request" as CloudFront event.

More information

Find more information about AWS Lambda@Edge here: https://docs.aws.amazon.com/lambda/latest/dg/lambda-edge.html

License

Do whatever you want. A link back to this repository, comments, feedback, contributions are appreciated, but not required.

Cloud Under Ltd is a small web engineering company based in Manchester, UK.