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

Next.js中间件匹配器排除首页失效问题求助

Next.js中间件排除根路径校验的解决方案

你的问题出在正则匹配的逻辑上,原写法的负向预查没有正确覆盖根路径的情况。以下是两种可行的解决办法:

方法一:使用Next.js匹配器的排除语法(推荐)

这种写法更直观,不容易出错,直接用!前缀指定要排除的路径:

export const config = {
  matcher: [
    // 先匹配所有路径
    "/:path*",
    // 排除不需要校验的路径
    "!/",
    "!/_next/static/:path*",
    "!/_next/image/:path*",
    "!/favicon.ico",
    "!/.*\\.(?:svg|png|jpg|jpeg|gif|webp)$",
  ],
};

方法二:修正原正则表达式

如果坚持用单个正则,需要调整负向预查的位置,让它能匹配到根路径的情况:

export const config = {
  matcher: [
    /*
     * Match all request paths except for:
     * - Root path (/)
     * - _next/static (static files)
     * - _next/image (image optimization files)
     * - favicon.ico (favicon file)
     * - Image files (svg, png, jpg, etc.)
     */
    "/((?!$|_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)",
  ],
};

这里去掉了^,因为当路径是/时,/后面的内容是空字符串,(?!$)就能匹配到这种情况,从而排除根路径的校验。

为什么原写法无效?

原正则里的^$|^/$是针对整个请求路径的,但你的正则结构是/((?!...).*),(?!...)只检查/后面的内容,而根路径/的/后面是空,^$在这里匹配的是整个字符串的开头结尾,不是/后面的部分,所以无法生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:00:03