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

Next.js中间件如何返回404响应?我的rewrite实现是否正确?

在Next.js中间件中返回正确的404响应

你当前用NextResponse.rewrite的写法存在语义问题:默认情况下rewrite会返回200的HTTP状态码,浏览器和搜索引擎会认为这个URL是有效的,只是内容显示404页面,这不符合404的核心语义——我们需要明确告诉客户端该URL不存在,返回标准的404状态码。

针对你的需求(除首页外,locale为默认值时返回404),正确的实现应该是在rewrite的同时指定状态码为404:

if (req.nextUrl.pathname !== "/" && req.nextUrl.locale === 'default') {
  const notFoundUrl = new URL('/not-found', req.url);
  return NextResponse.rewrite(notFoundUrl, { status: 404 });
}

为什么这么做?

  • NextResponse.rewrite可以让你渲染自定义的404页面内容(比如项目里/not-found路由对应的页面)
  • 加上{ status: 404 }后,HTTP响应状态码会被设置为404,既展示了自定义页面,又符合HTTP语义,搜索引擎也能正确识别该URL无效

注意事项

  • 如果你用的是App Router,确保项目中存在app/not-found.js或app/not-found.tsx组件;如果是Pages Router,对应创建pages/404.js或pages/404.tsx,这样rewrite后才能渲染你的自定义404页面。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:54:18