Next.js中间件部署Netlify后NextRequest.nextUrl.locale返回空字符串
req.nextUrl.locale为空的原因 以下是可能导致该问题的核心原因:
Netlify未正确适配Next.js的国际化路由配置
req.nextUrl.locale的取值依赖于next.config.js中配置的i18n规则。如果Netlify部署时没有正确读取或应用这些配置,会导致locale无法被解析。比如Netlify的边缘函数环境不会自动适配Next.js的国际化路由逻辑,需要手动在netlify.toml或控制台添加对应配置,确保路由的locale参数能传递到中间件。边缘函数与本地开发环境的执行逻辑差异
本地开发使用Next.js自带的服务器,而Netlify用的是自有边缘函数运行时。两者在请求解析逻辑上存在差异:本地服务器会自动从请求路径、headers中提取locale信息,但Netlify的边缘函数可能缺少这一步处理,导致req.nextUrl.locale无法被填充。默认locale的自动识别逻辑缺失
访问默认locale的路由(如根路径/)时,本地开发服务器会自动将默认locale赋值给nextUrl.locale,但Netlify环境可能没有这个自动识别逻辑。此时需要在中间件中显式处理默认locale的 fallback,或者确保请求路径包含locale前缀。Next.js版本与Netlify的兼容性问题
部分Next.js版本(尤其是App Router模式下的13+版本)在Netlify部署时,存在locale解析的兼容性bug。若项目使用的Next.js版本与Netlify支持的版本不匹配,或缺少特定部署配置,会导致locale获取失败。
内容的提问来源于stack exchange,提问作者Ahmed Ashraf

