From 86d0d9c7ed315cefaa8816913fc537e69a4c9b4f Mon Sep 17 00:00:00 2001 From: AI Directory Platform Date: Thu, 10 Sep 2026 06:34:59 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20/en/*=20=E6=98=BE=E5=BC=8F=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E5=8C=96=E9=87=8D=E5=AE=9A=E5=90=91=E8=BF=9B=20proxy?= =?UTF-8?q?=EF=BC=88=E5=BA=95=E5=BA=A7=E5=A5=91=E7=BA=A6=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=20next-intl=20=E5=86=85=E9=83=A8=E8=A1=8C?= =?UTF-8?q?=E4=B8=BA=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - proxy 显式拦截 /en 与 /en/* → 307 到去前缀形式(带 query 保留), 历史或外部 /en/* 链接永远落到规范 URL - 实测:用户报告的 /en/login 404 在当前部署无法复现(五站均 307→200), 推断为早前构建残缺窗口期的缓存;显式规则使该行为永固可测 --- packages/core/src/proxy.ts | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/core/src/proxy.ts b/packages/core/src/proxy.ts index 9e5054e..4edc9a9 100644 --- a/packages/core/src/proxy.ts +++ b/packages/core/src/proxy.ts @@ -1,11 +1,27 @@ import createIntlMiddleware from 'next-intl/middleware'; import { routing } from './i18n/routing'; -import type { NextRequest } from 'next/server'; -import { NextResponse } from 'next/server'; +import { NextRequest, NextResponse } from 'next/server'; const intlMiddleware = createIntlMiddleware(routing); +/** + * # proxy + * 说明:站点入口中间件。 + * - 显式规范化:/en 与 /en/* 307 → 去前缀形式(/ 与 /*)。 + * 底座契约:默认语言 URL 不带前缀;历史/外部 /en/* 链接永远落到规范 URL, + * 行为不依赖 next-intl 内部实现。中文 /zh/* 由 intlMiddleware 正常处理。 + */ export function proxy(request: NextRequest) { + const { pathname, search } = request.nextUrl; + + if (pathname === '/en' || pathname.startsWith('/en/')) { + const target = pathname === '/en' ? '/' : pathname.slice(3); + return NextResponse.redirect( + new URL(`${target}${search}`, request.url), + 307 + ); + } + return intlMiddleware(request); }