You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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'
  },
  // 其他配置项
};

关键修正说明

  1. 保留语言区域:

    • 通过:locale参数手动捕获URL中的语言前缀,重定向时直接传递到目标地址
    • 不带语言前缀的路由,使用:defaultLocale变量自动补全默认语言
  2. 排除xyz路由:

    • 用正则负向前瞻(?!xyz)确保匹配的路径片段不包含xyz,不管是否带语言前缀
    • 单独添加规则处理不带语言前缀的xyz路由,自动补全默认locale,避免空白页
  3. 禁用自动locale处理:

    • 给每个重定向规则添加locale: false,防止Next.js内置的i18n逻辑和自定义规则冲突

内容的提问来源于stack exchange,提问作者dragonmnl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 03:12:15