Next.js始终显示根not-found.tsx而非匹配的嵌套页面问题
Next.js 嵌套404页面未触发问题
我的应用文件夹结构如下:
app/ [lang]/ dashboard/ -not-found.tsx // 嵌套404页面 status-and-balance/ page.tsx -not-found.tsx // 根级404页面
当访问不存在的URL /en/dashboard/users 时,应用显示根目录下的not-found.tsx页面,而非dashboard文件夹下的嵌套404页面,这属于异常行为,请问原因是什么?
核心原因
Next.js 中嵌套 not-found.tsx 生效的前提是父路由段必须是一个可访问的有效路由。你的 dashboard 目录下没有对应的 page.tsx 或 layout.tsx,导致 /en/dashboard 本身并非合法的路由入口——当访问 /en/dashboard/users 时,Next.js 会先判定 /en/dashboard 路径不存在,直接回退到根级404页面,而非进入 dashboard 的路由上下文加载嵌套404组件。
解决办法
在 dashboard 目录下添加一个 page.tsx(哪怕是空组件)或者 layout.tsx,让 /en/dashboard 成为有效路由:
// app/[lang]/dashboard/page.tsx export default function DashboardPage() { return <div>Dashboard 主页</div>; }
或者添加布局文件:
// app/[lang]/dashboard/layout.tsx export default function DashboardLayout({ children }: { children: React.ReactNode }) { return <div>{children}</div>; }
添加后,访问 /en/dashboard/users 这类不存在的子路由时,Next.js 会先匹配到 /en/dashboard 这个有效路由,再触发其下的嵌套 not-found.tsx。
额外排查点
如果添加后仍不生效,检查:
- 是否在
next.config.js中配置了重写/重定向规则,导致路由被意外导向根路径 - 动态路由
[lang]是否正确配置了本地化逻辑,没有拦截或修改路由匹配
内容的提问来源于stack exchange,提问作者ינון רחמים
相关产品推荐
相关产品推荐

