AI Workshop: learn to build apps with AI →
Netlify: How I fixed the trailing slash in Netlify rewrites

Join the AI Workshop and learn to build real-world apps with AI. A hands-on, practical program to level up your skills.


Netlify has this great feature that allows me to create a number of duplicate pages, by adding them to the _redirects file in the public root of the project (public/_redirects in Hugo, for example).

I use it to power some of my websites.

If I have a bunch of pages under content/original, by writing:

/copy/* /original/:splat  200

I can use the URL

/copy

and when I access https://mysite.com/copy I have the content stored inside https://mysite.com/original, and the URL does not change. It’s not a redirect (despite the _redirects file name), it’s a rewrite because I used the 200 code at the end. Had I used 301, that would have been a 301 redirect.

Anyway, the problem I stumbled upon is this: there’s no way to automatically add the trailing slash at the end, so if you access /copy and /copy/, and you use relative URLs for images and links, without a trailing slash URLs will lead to 404 and images will be broken.

I looked for a solution in my static site generator, to see if it could replicate redirects in another way, but in the end my solution was client side.

And it’s very simple.

I added this JavaScript snippet at the bottom of my pages:

<script>
(function() {
  if (!location.href.endsWith('/')) {
    window.location = location.href + '/'
  }
}())
</script>

And now the page, if there’s no trailing slash, will immediately reload with the slash appended at the end.

The process is so quick it’s almost invisible to the user.

Lessons in this unit:

0: Introduction
1: Create a Netlify account
2: Deploy to Netlify
3: A tutorial to host your Static Site on Netlify
4: Auto trigger deploys on Netlify
5: Netlify Lambda Functions Tutorial
6: How to use environment variables in Netlify functions
7: How to use npm packages in Netlify Functions
8: How to access query parameters in Netlify functions
9: How to test Netlify Functions locally
10: How to use Netlify Edge Functions
11: How to set up "cloud cron jobs" using Netlify Scheduled Functions
12: ▶︎ How I fixed the trailing slash in Netlify rewrites
13: Durable cache on Netlify
14: How to return HTML from a Netlify function
15: How to use ES modules in Netlify functions
16: How to trigger a Netlify-Vercel-Cloudflare Pages redeploy using a link