如何在Next.js中间件中通过NextResponse返回410状态码?
实现Next.js中间件直接返回410永久失效响应(不修改URL)
当前代码的问题
你的代码存在两处问题:
- 语法错误:
mime: "application/text"!中的!属于多余的无效语法,会导致代码报错 - 参数错误:
NextResponse.respond的配置项中没有mime字段,应该通过headers设置响应的Content-Type
正确实现方式
以下是修正后的代码,完全满足你的需求——直接返回410响应,不修改或重定向URL,跳过页面构建阶段:
import { NextRequest, NextResponse } from 'next/server'; export function middleware(request: NextRequest) { const { pathname } = request.nextUrl; // 匹配包含指定文本的失效URL if (pathname.includes("some text")) { return NextResponse.respond("", { status: 410, headers: { "Content-Type": "text/plain", }, }); } // 非匹配请求继续正常处理 return NextResponse.next(); }
替代方案(兼容性更强)
如果遇到NextResponse.respond的版本兼容问题,可以直接返回原生Response实例,效果完全一致:
import { NextRequest } from 'next/server'; export function middleware(request: NextRequest) { const { pathname } = request.nextUrl; if (pathname.includes("some text")) { return new Response("", { status: 410, headers: { "Content-Type": "text/plain", }, }); } return NextResponse.next(); }
效果说明
上述两种写法都会直接向客户端返回410状态码和空响应体,不会改变请求URL,同时会终止后续的页面构建流程,有效减少无效资源消耗,完全符合你的需求。
内容的提问来源于stack exchange,提问作者user254694
相关产品推荐
相关产品推荐

