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

如何在Next.js中配置Middleware排除/api/*路由?

在Next.js中让Middleware排除/api/*路由的实现方法

有两种简洁的方式可以实现这个需求,不用逐个列举需要包含的路由:

方法一:在Middleware函数内部判断路径

直接在Middleware逻辑里检查请求路径是否以/api/开头,是的话直接放行,否则执行你的业务逻辑:

import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {
  // 跳过所有/api/开头的路由
  if (request.nextUrl.pathname.startsWith('/api/')) {
    return NextResponse.next();
  }

  // 这里写你要在非API路由执行的逻辑
  // 比如用户认证、页面重定向、响应头修改等
  // 示例:打印当前路由
  console.log('Middleware triggered on:', request.nextUrl.pathname);

  // 继续处理请求
  return NextResponse.next();
}

方法二:用config.matcher的否定匹配模式

Next.js的Middleware支持通过matcher配置路由匹配规则,其中可以使用负向前瞻正则来排除特定路由,这种方式更高效,因为Middleware只会在匹配的路由上触发,不会进入函数内部判断:

import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';

export function middleware(request: NextRequest) {
  // 这里直接写你的非API路由逻辑即可
  return NextResponse.next();
}

// 配置匹配所有路由,除了/api/开头的路径
export const config = {
  matcher: [
    '/((?!api/).*)',
  ],
};

关于matcher正则的说明

/((?!api/).*)是正则的负向前瞻语法,意思是:匹配任何不包含api/开头的路径。这个规则会自动覆盖所有非API路由,不用手动添加其他路由规则。

两种方法的选择

  • 如果需要在排除API路由前做一些额外检查(比如某些特殊API路由需要执行Middleware),用方法一更灵活;
  • 如果只是单纯完全排除所有/api/*路由,方法二更高效,因为Middleware不会在API路由上被触发。

内容的提问来源于stack exchange,提问作者Can Poyrazoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:06:19