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); }