使用next-intl拦截所有无Locale的请求并重定向的问题
解决next-intl中间件仅拦截根路径的问题
要让所有不带Locale的请求都重定向到对应Locale的URL,只需给中间件添加路径匹配配置,确保它作用于所有需要处理的路由:
import { createIntlMiddleware } from "next-intl/server"; import { NextRequest } from "next/server"; const intlMiddleware = createIntlMiddleware({ locales: ["en", "de", "fr", "es"], defaultLocale: "en", }); export default function middleware(request: NextRequest) { return intlMiddleware(request); } // 配置匹配规则:处理所有非静态资源、非Next.js内部路由的请求 export const config = { matcher: [ "/((?!_next|fonts|.*\\..*).*)" ] };
关键说明:
- 原代码缺少
config.matcher配置,导致Next.js默认未让中间件覆盖所有子路由。 matcher规则会排除_next(Next.js内部资源)、静态文件(如.js/.css/.png)等无需本地化的路径,只处理页面路由。createIntlMiddleware本身会自动检测请求的Locale偏好(从Cookie、Accept-Language头),如果路径不带Locale前缀,就重定向到对应Locale的正确URL。
内容的提问来源于stack exchange,提问作者Amine BOUHLAL
相关产品推荐
相关产品推荐

