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

Next.js中间件重定向时如何避免无限循环?

解决方案

问题根源是中间件会拦截所有请求,包括重定向后的/user路径请求,导致重复触发重定向逻辑形成循环。只需在中间件中增加路径判断,跳过目标路由的重定向逻辑即可。

修改后的中间件代码:

export async function middleware(request: NextRequest) {
  const isUserLoggedIn = ...
  
  // 获取当前请求的路径
  const currentPath = request.nextUrl.pathname;
  
  // 如果用户已登录且当前路径不是目标路由,才执行重定向
  if (isUserLoggedIn && currentPath !== '/user') {
    return NextResponse.redirect(new URL('/user', request.url));
  }

  return NextResponse.next();
}

如果有多个私有路由(比如/user、/dashboard),可以用数组扩展判断逻辑,提升扩展性:

export async function middleware(request: NextRequest) {
  const isUserLoggedIn = ...
  const currentPath = request.nextUrl.pathname;
  const privateRoutes = ['/user', '/dashboard'];
  
  if (isUserLoggedIn && !privateRoutes.includes(currentPath)) {
    return NextResponse.redirect(new URL('/user', request.url));
  }

  return NextResponse.next();
}

这样处理后,当用户被重定向到/user时,中间件检测到当前路径属于目标路由,会直接放行,不会再次触发重定向,彻底解决无限循环问题。

内容的提问来源于stack exchange,提问作者warzonemaster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:04:52