i18n: Building app using `strategy: 'prefix'` throws pre-render `(Error: [301])`

Environment

  • Operating System: Darwin
  • Node Version: v16.16.0
  • Nuxt Version: 3.6.5
  • Nitro Version: 2.5.2
  • Package Manager: npm@8.11.0
  • Builder: vite
  • User Config: -
  • Runtime Modules: -
  • Build Modules: -

Reproduction

https://stackblitz.com/edit/nuxt-starter-jkohmm?file=nuxt.config.ts

Describe the bug

When trying to use strategy: 'prefix', Im getting (Error: [301])

image

Additional context

No response

Logs

✔ Server built in 920ms                                                                                                                                                           12:55:12 PM
✔ Generated public .output/public                                                                                                                                           nitro 12:55:12 PM
ℹ Initializing prerenderer                                                                                                                                                  nitro 12:55:12 PM
ℹ Prerendering 2 routes                                                                                                                                                     nitro 12:55:13 PM
  ├─ /test (64ms) (Error: [301] )                                                                                                                                            nitro 12:55:13 PM
  ├─ / (65ms) (Error: [301] )                                                                                                                                                nitro 12:55:13 PM
                                                                                                                                                                             nitro 12:55:13 PM
Errors prerendering:
  ├─ /test (301)                                                                                                                                                             nitro 12:55:13 PM
  ├─ / (301)                                                                                                                                                                 nitro 12:55:13 PM
                                                                                                                                                                             nitro 12:55:13 PM

 ERROR  Exiting due to prerender errors.                                                                                                                                           12:55:13 PM

  at Module.prerender (node_modules/nitropack/dist/shared/nitro.1db3349c.mjs:204:11)
  at async eval (node_modules/nuxt/dist/index.mjs:2658:7)
  at async build (node_modules/nuxt/dist/index.mjs:3811:5)
  at async Object.invoke (node_modules/nuxi/dist/chunks/build.mjs:74:5)
  at async _main (node_modules/nuxi/dist/cli.mjs:64:20)

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 19

Most upvoted comments

You can specifically set your root to not prerender. This solved it for me:

routeRules: {
      "/": { prerender: false },
      "/de": { prerender: true },
      "/en": { prerender: true },
    },

disclaimer

i am not planning on running this static so nuxt generate was a mistake in my case for this particular project.

i18n: {
    lazy: true,
    langDir: "locales/",
    defaultLocale: "en",
    strategy: "prefix",
    detectBrowserLanguage: {
      useCookie: true,
      cookieKey: "i18n_redirected",
      fallbackLocale: "en",
      redirectOn: "root",
    },
    customRoutes: "config",
    pages: {
      about: {
        de: "/ueber-mich",
        en: "/about",
      },
    },
    locales: [
      {
        name: "Deutsch",
        code: "de",
        iso: "de-DE",
        file: "de",
        icon: "i-circle-flags-de",
      },
      {
        name: "English",
        code: "en",
        iso: "en-US",
        file: "en",
        icon: "i-circle-flags-en",
      },
    ],
  },
│   .gitignore
│   app.config.ts
│   app.vue
│   nuxt.config.ts
│   package-lock.json
│   package.json
│   README.md
│   tailwind.config.js
│   tsconfig.json
├───locales
│   ├───de
│   │       index.ts
│   │
│   └───en
│           index.ts
└───pages
│       about.vue
│       index.vue

running generate results in an error Error: [404] Page not found: /

Prerendering 7 initial routes with crawler   
  ├─ /200.html (37ms)                           
  ├─ /404.html (38ms)                           
  ├─ / (108ms)                                                                         
  │ └── Error: [404] Page not found: /
  ├─ /en (103ms)                                                                  
  ├─ /en/about (83ms)                                                     
  ├─ /de (104ms)                                                         
  ├─ /de/ueber-mich (104ms)                                     
  ├─ /en/about/_payload.json (0ms)                           
  ├─ /en/_payload.json (1ms)                                          
  ├─ /de/_payload.json (3ms)                                   
  ├─ /de/ueber-mich/_payload.json (1ms) 
                                                                                 
Errors prerendering:
  ├─ / (108ms)                                                   
  │ └── Error: [404] Page not found: /
                                                                              

 ERROR  Exiting due to prerender errors. 

And its fine to not have a root index.html file ?