使用Next.js i18n时如何重定向除指定路由外的所有路由?
Next.js i18n路由重定向配置修正
针对你遇到的i18n路由重定向丢失语言区域、xyz路由异常问题,以下是修正后的配置方案:
修正后的代码
const nextConfig = { async redirects() { return [ // 规则1:处理带语言前缀的路由,排除含xyz的路径,保留语言区域 { source: '/:locale((?!xyz).*)/:path*((?!xyz).*)', destination: 'https://www.someurl.abc/:locale/:path*', permanent: true, locale: false // 禁用自动locale处理,手动控制参数传递 }, // 规则2:处理不带语言前缀的路由,自动补默认locale,排除含xyz的路径 { source: '/:path((?!xyz).*)', destination: 'https://www.someurl.abc/:defaultLocale/:path*', permanent: true, locale: false }, // 规则3:补全不带语言前缀的xyz路由,触发默认locale加载 { source: '/xyz/:path*?', destination: '/:defaultLocale/xyz/:path*?', permanent: false, // 临时重定向,让Next.js处理i18n匹配 locale: false } ]; }, i18n: { locales: ['en', 'zh', ...], // 替换为你的实际语言列表 defaultLocale: 'en' }, // 其他配置项 };
关键修正说明
保留语言区域:
- 通过
:locale参数手动捕获URL中的语言前缀,重定向时直接传递到目标地址 - 不带语言前缀的路由,使用
:defaultLocale变量自动补全默认语言
- 通过
排除xyz路由:
- 用正则负向前瞻
(?!xyz)确保匹配的路径片段不包含xyz,不管是否带语言前缀 - 单独添加规则处理不带语言前缀的xyz路由,自动补全默认locale,避免空白页
- 用正则负向前瞻
禁用自动locale处理:
- 给每个重定向规则添加
locale: false,防止Next.js内置的i18n逻辑和自定义规则冲突
- 给每个重定向规则添加
内容的提问来源于stack exchange,提问作者dragonmnl
相关产品推荐
相关产品推荐

