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

Next.js 13.3中间件重写导致SSR页面props偶发未定义

Next.js 13.3中间件路由重写导致SSR页面Props丢失问题分析

问题背景

基于Next.js 13.3开发带翻译URL的多语言站点,为避免大量重写/重定向配置破坏客户端导航,采用中间件处理翻译路由。但在非英文语言环境(存在路由重写的场景)下,通过next/link导航至SSR页面时,有50%概率出现页面Props全部未定义的问题:

  • getServerSideProps执行正常,控制台能打印数据,但Props无法传递到页面
  • 直接访问SSR页面则完全正常
  • 推测静态页面重新生成时也会出现同类问题

原代码问题点

原重写逻辑中使用new URL(rewrite.destination, req.url)构建目标URL,这是导致问题的核心原因:

// 原错误代码
return NextResponse.rewrite(new URL(rewrite.destination, req.url))

Next.js中间件的req.nextUrl对象附带了框架内部维护的路由上下文元数据(包括locale、路由参数、SSR数据传递的关联标识等)。直接创建新的URL对象会丢失这些元数据,导致客户端导航时,Next.js无法正确关联重写后的路由与原SSR页面的Props传递逻辑,最终出现Props丢失。

修复方案

改用req.nextUrl.clone()修改pathname的方式,保留Next.js内部的路由上下文元数据:

// 修复后代码
const url = req.nextUrl.clone()
url.pathname = rewrite.destination
return NextResponse.rewrite(url)

这种方式在原有路由上下文基础上修改路径,确保重写后的路由能正确关联到对应的SSR页面,Props即可正常传递。

总结

在Next.js中间件中处理路由重写时,必须基于req.nextUrl.clone()修改路径,而非直接创建新URL对象。后者会破坏框架内部的路由上下文关联,引发SSR Props丢失、静态页面生成异常等问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 21:10:24