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
相关产品推荐
相关产品推荐

