Nuxt i18n页面重定向异常:未按路径映射转换URL
Fix Nuxt i18n Redirect Issue: /my-account to /hr/moj-racun Instead of /hr/my-account
我之前碰到过一模一样的问题,这大概率是Nuxt i18n的自动重定向逻辑在处理无前缀路径时,没有优先读取页面级的paths配置,反而直接给默认语言前缀拼接了原路径名。咱们可以通过这几个步骤来解决:
1. 确认页面级paths配置被正确识别
首先先确保你的pages/my-account.vue里的配置没有问题,就像你写的这样:
export default { nuxtI18n: { paths: { en: '/my-account', hr: '/moj-racun' } } }
接下来可以做这两件事验证:
- 打开Nuxt Dev Tools(开发环境下),查看Routes列表,确认
hr语言对应的路由确实是/hr/moj-racun,而不是/hr/my-account。 - 如果路由显示不对,试试清空Nuxt缓存:删除
.nuxt文件夹和node_modules/.cache目录,然后重启开发服务,强制重新生成路由。
2. 手动添加重定向规则(最直接的解决方式)
如果自动重定向逻辑不生效,咱们可以直接在nuxt.config.js里通过router.extendRoutes手动指定重定向,绕过默认的i18n重定向逻辑:
// nuxt.config.js export default { router: { extendRoutes(routes, resolve) { // 找到克罗地亚语对应的目标路由 const hrTargetRoute = routes.find(route => route.path === '/hr/moj-racun'); if (hrTargetRoute) { // 添加重定向规则:把/my-account指向/hr/moj-racun routes.push({ path: '/my-account', redirect: '/hr/moj-racun' }); } } }, // 你的i18n全局配置 i18n: { locales: [ { name: 'Hrvatski', code: 'hr', iso: 'hr-HR', file: 'hr.js' }, { name: 'English', code: 'en', iso: 'en-US', file: 'en.js' } ], langDir: 'locales/', strategy: 'prefix', defaultLocale: 'hr', lazy: true, detectBrowserLanguage: false } }
这种方式直接强制指定了跳转路径,不会再依赖i18n的自动映射逻辑,能确保访问/my-account时直接跳转到正确的本地化路径。
3. 检查全局i18n配置的细节
- 确认
defaultLocale确实设置为hr,没有被其他插件或中间件覆盖。 - 你的
strategy: 'prefix'配置是正确的(默认语言也带前缀),如果之前用过其他策略,可能需要清理缓存后再测试。
4. 内部跳转使用正确的路由名称
如果是应用内部跳转,建议使用Nuxt自动生成的路由名称,而不是直接写路径,比如:
<nuxt-link :to="{ name: 'hr-moj-racun' }">Moj Račun</nuxt-link>
路由名称的格式是[locale]-[page-slug],你可以在Dev Tools的Routes列表里找到对应的名称,这样能避免路径拼写错误导致的跳转问题。
通常这种问题都是路由生成时页面级的paths配置没有被正确加载,或者自动重定向逻辑优先使用了原路径名。通过以上步骤,应该能解决你的重定向问题。
内容的提问来源于stack exchange,提问作者steakoverflow
相关产品推荐
相关产品推荐

