如何在Next.js中间件中设置301重定向?
在Next.js的middleware.js中设置重定向状态码
在Next.js的Middleware里,你可以通过NextResponse.redirect()方法的第二个参数指定重定向的HTTP状态码,具体实现如下:
基础用法示例
import { NextResponse } from 'next/server' export function middleware(request) { // 永久重定向(301状态码)到目标URL if (request.nextUrl.pathname === '/old-path') { return NextResponse.redirect(new URL('/new-path', request.url), 301) } // 临时重定向(302状态码,显式指定)到目标URL if (request.nextUrl.pathname === '/temp-old') { return NextResponse.redirect(new URL('/temp-new', request.url), 302) } }
关键说明
NextResponse.redirect()的第二个参数支持标准HTTP重定向状态码,常用的包括301(永久重定向)、302(临时重定向)、307(临时重定向,保留原请求方法)、308(永久重定向,保留原请求方法)。- 若不指定第二个参数,Next.js 13+版本默认使用
307状态码,旧版本可能默认302,需注意版本差异。 - 使用前必须导入
NextResponse工具类,这是处理Middleware响应的核心依赖。
保留请求方法的重定向示例
如果需要重定向时保留原请求的HTTP方法(比如POST、PUT请求),可以使用307或308状态码:
import { NextResponse } from 'next/server' export function middleware(request) { // 永久保留请求方法的重定向(308) if (request.nextUrl.pathname === '/old-post-endpoint') { return NextResponse.redirect(new URL('/new-post-endpoint', request.url), 308) } }
内容的提问来源于stack exchange,提问作者Ali EXE
相关产品推荐
相关产品推荐

