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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 14:52:01