Next.js中间件在重定向/重写后是否会再次执行?
Next.js 中间件重定向/重写后是否会重复执行?
当Next.js中间件返回NextResponse.redirect()或NextResponse.rewrite()时,当前请求不会触发中间件再次执行——但要注意:重定向/重写后生成的新请求会重新进入中间件的处理流程,这正是引发无限循环的核心原因。
举个典型的循环场景:
- 中间件规则:所有未登录用户强制重定向到
/login - 但未对
/login路由做排除处理,导致用户被重定向到/login后,中间件再次检测该请求,又触发重定向,形成无限循环
解决这类问题的核心是在中间件中添加路由排除逻辑,示例代码如下:
import { NextResponse } from 'next/server' import type { NextRequest } from 'next/server' export function middleware(request: NextRequest) { // 排除登录页面,避免进入循环 if (request.nextUrl.pathname.startsWith('/login')) { return NextResponse.next() } // 模拟登录状态判断逻辑 const isLoggedIn = false if (!isLoggedIn) { return NextResponse.redirect(new URL('/login', request.url)) } } // 作用于所有路由 export const config = { matcher: '/:path*', }
额外注意事项:
rewrite的逻辑和redirect一致:重写后的目标路由也会经过中间件处理,同样需要做好路由过滤- 务必确保重定向/重写的目标路径不会被同一中间件规则再次匹配,否则必然陷入循环
内容的提问来源于stack exchange,提问作者Magnus
相关产品推荐
相关产品推荐

