Explain Codes LogoExplain Codes Logo

S3 static pages without .html extension

html
url-rewrites
cloudfront
s3-static-pages
Nikita BarsukovbyNikita Barsukov·Mar 5, 2025
TLDR

For a cleaner URL structure on an Amazon S3-hosted static website, upload the pages without the .html extension. It's important to set the metadata Content-Type to text/html for these specific files. With this setup, the content is available via extension-less URLs, providing improved usability and navigation:

  • Upload: examplePageSet Metadata: Content-Type: text/html.
  • Access via: http://yourbucket.s3-website-your-region.amazonaws.com/examplePage.

Deploying folder-based navigation

In addition to ditching the .html extension, strive to create a separate folder for each page. Include an index.html document in each folder. Access to the folder will automatically serve the index.html:

  • Make a folder: examplePage/
  • Inside it: index.html
  • Access via: http://yourbucket.s3-website-your-region.amazonaws.com/examplePage/

By staying organized, an enhanced user experience is guaranteed.

Utilising CloudFront for URL rewrites

While using Amazon S3 and CloudFront, enforce URL rewrites via Lambda@Edge functions to manage extension-less URLs:

  • Set up Rewrite rules: Make requests to /examplePage serve examplePage.html.
  • Prioritize Performance: Optimize CloudFront functions for faster response times.

Fiddling with CloudFront configurations can transform your static website into a high-performance work of art.

Effectively managing redirects

Add the Website Redirect Location metadata to each .html file to seamlessly redirect old .html URLs to the new, extension-less URLs:

  • Metadata Setting in S3 console: Website Redirect Location: /examplePage.
  • This will maintain backward compatibility and ensure a smooth transition for users.

This technique can help combat 404 errors, maintain SEO rankings, and improve user experience.

Along your journey to extension-less URLs, you may encounter a few challenges:

  • MIME type mismatch: Ensure Content-Type is set to text/html for each file.
  • Broken internal links: Update all internal hyperlinks to match the new URL format.
  • Bucket misconfigurations: Confirm that your bucket's index document is correctly set.

Addressing these ahead of time will ensure a smooth transition to a clean URL structure.

Refining your web setup

Don't call it a day yet. Spice up your setup:

  • Code refactoring: Any old code staring at you accusingly? Fine-tune for better performance.
  • Link updates: Make sure your internal links don't 404 your guests.

These improvements will add the final touches on your journey to a more user-friendly URL layout.