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

Next.js 13(App目录)动态路由下自定义404页面无法显示问题

Next.js 13 App目录模式下动态路由导致自定义404页面失效的解决方法

问题核心原因

从你的路由结构和代码来看,404页面无法正常显示主要有两个关键问题:

1. 404页面代码存在语法错误

你的404代码有两处明显错误:

  • 函数名使用了JavaScript关键字undefined,属于非法命名
  • export default后直接写404,没有关联正确的组件

2. App目录下404页面的路由规则不符合要求

在Next.js 13 App目录模式中,自定义404页面必须遵循:

  • 文件名固定为not-found.js(或.tsx)
  • 全局404页面需放在app根目录下;如果是动态路由(如你的[id]目录)内的局部404,要放在对应动态路由文件夹里

修复步骤

步骤1:修正404页面代码

将404页面代码改为合法的组件格式,保存为app/not-found.js(全局生效)或app/movies/[id]/not-found.js(仅动态路由内生效):

export default function NotFound() {
  return (
    <>
      <div className="flex justify-center items-center w-full h-full">
        <h1 className="text-5xl">404 页面未找到</h1>
      </div>
    </>
  )
}

步骤2:调整路由结构匹配规则

  • 若要处理全站未匹配的路由,把not-found.js放在app根目录下
  • 若仅针对/movies/[id]路径设置404,就把文件放在app/movies/[id]文件夹内

步骤3:给动态路由添加404触发逻辑

动态路由[id]会匹配/movies/后的任意路径,若要在电影ID不存在时触发404,需要在动态路由页面里添加判断:

import { notFound } from 'next/navigation'

export default async function MoviePage({ params }) {
  const res = await fetch(`https://api.themoviedb.org/3/movie/${params.id}?api_key=${process.env.API_KEY}`)
  
  if (!res.ok) {
    // API返回错误时,触发404页面
    notFound()
  }

  const movie = await res.json()
  
  return <div>{movie.title}</div>
}

补充说明

  • App目录模式下,not-found.js会被Next.js自动识别为404页面,无需额外配置
  • 确保你的Next.js版本在13.4及以上,早期版本对App目录的404支持存在缺陷

内容的提问来源于stack exchange,提问作者Amir-H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:12:43