Exporting a NextJS app with correct static page routes on the server

When exporting a NextJS application ("build": "next build && next export") to the default out folder, the static pages get exported to .html files.

The issue with this is, when navigating to mydomain.com/about from the home page (mydomain.com) it works well but if you hit a hard refresh then you'll get a 404.

That's because NextJS converted the static pages to .html (about.html) which is what we upload to the server. So the link becomes mydomain.com/about.html and not mydomain.com/about.

One solution is to add this to next.config.js :

module.exports = {
  trailingSlash: true,

This would create a folder with the route name and have an index.html file in this folder. But I don't like the fact that trailingSlash: true or exportTrailingSlash: true, creates a folder with a single index.html in it for every route I have. That would look cluttersome if we had like 25 folders for 25 route pages.

If you upload the exported out folder to a server that supports URL rewrites like Apache httpd or nginx you can create re-writes for your routes. More work, but works well.

Create a file called .htaccess in the public folder and add this :

RewriteEngine On

RewriteRule ^about$ about.html

Now when you goto mydomain.com/about it'll fetch mydomain.com/about.html