netlify/next-on-netlify

[i18n] non-default locales in sub-path-routing lacking redirects

saschazar21 opened this issue · 1 comments

I came across a bug, where automatic redirects based on a non-default locale result in an HTTP status 404.

While the project builds just fine, it seems the i18n routes are not properly redirected using the _redirects file. They all end up in an HTTP status 404. The i18n-configuration in next.config.js is the following:

  • locales: [en, de]
  • defaultLocale: en
  • use automatic sub-path-routing by default

The outcome after next build:

Page                                                           Size     First Load JS
┌ λ /                                                          3.09 kB        59.2 kB
├   └ css/f1d1aa362771dbbb9bf2.css                             700 B
├   /_app                                                      0 B            56.1 kB
├ λ /404                                                       3.25 kB        59.4 kB
├ λ /api/graphql                                               0 B            56.1 kB
├ λ /api/manifest.json                                         0 B            56.1 kB
└ λ /stations/[station]                                        7.25 kB        63.4 kB
    └ css/ab4ac78f55b7be8c2e88.css                             1.6 kB
+ First Load JS shared by all                                  56.1 kB
  ├ chunks/435fbf78afb0ddecc1b360b3d2e1c38a37ed9942.cc35a6.js  21.9 kB
  ├ chunks/commons.799d26.js                                   9.78 kB
  ├ chunks/framework.432e4f.js                                 9.43 kB
  ├ chunks/main.8e2058.js                                      7.76 kB
  ├ chunks/pages/_app.c962df.js                                5.78 kB
  ├ chunks/webpack.30ded3.js                                   1.47 kB
  └ css/76c31999168d90a00cec.css                               1.69 kB

λ  (Lambda)  server-side renders at runtime (uses getInitialProps or getServerSideProps)
○  (Static)  automatically rendered as static HTML (uses no initial props)
●  (SSG)     automatically generated as static HTML + JSON (uses getStaticProps)
   (ISR)     incremental static regeneration (uses revalidate in getStaticProps)

You see, there are a lot of getServerSideProps server-side rendered routes (mainly due to SEO information in <head>). The generated _redirects file by next-on-netlify is the following:

# Next-on-Netlify Redirects
/  /.netlify/functions/next_index  200
/_next/data/OHn0dZP5sVywVpIVkGiQG/index.json  /.netlify/functions/next_index  200
/_next/data/OHn0dZP5sVywVpIVkGiQG/stations/:station.json  /.netlify/functions/next_stations_station  200
/api/graphql  /.netlify/functions/next_api_graphql  200
/api/manifest.json  /.netlify/functions/next_api_manifestjson  200
/stations/:station  /.netlify/functions/next_stations_station  200

So to have a proper route catching, the following redirects are missing IMO:

/en  /.netlify/functions/next_index  200
/de  /.netlify/functions/next_index  200
/en/stations/:station  /.netlify/functions/next_stations_station  200
/de/stations/:station  /.netlify/functions/next_stations_station  200

For SSG routes, it seems there is no 'fallback' redirect to the resulting default locale sub-path (e.g. /about ➡️ /en/about.html)

What I've already tried

Manually adding the mentioned /de & /en redirects above, but in case for /de, they end up in endless redirects. So I'm assuming there's some work needed in the template files as well...

Versions

  • Next: 10.0.3
  • next-on-netlify: ^2.6.3 & github:netlify/next-on-netlify#ll/i18n

Related

thank you for opening this! this is covered in #71 and in the WIP draft you linked so i'm going to close it. when i push up a commit that should address your concerns, i'll be sure to tag you there! <3