NextJS 12.2.2版本中间件未触发,访问/test路径无重定向反而显示404页面求助
排查Next.js 12.2.2中间件不生效的问题
根据你的代码和描述,我整理了几个最可能导致中间件没触发、访问/test出现404的原因:
1. 未导入NextResponse核心模块
你的代码里调用了NextResponse.redirect(),但完全没有导入这个模块!这会直接导致运行时错误,中间件逻辑根本无法执行,自然不会触发重定向。
修复方法:在文件顶部添加导入语句:
import { NextResponse } from 'next/server'
2. 中间件文件路径放置错误
在Next.js 12版本中,中间件文件不能放在pages文件夹下,它必须存放在项目根目录(如果你的项目用了src结构,就放在src目录的根目录)。
你当前的路径是/myproject/pages/middleware.js,这不符合Next.js的中间件识别规则,系统不会把这个文件当作中间件处理。需要把middleware.js移动到/myproject/middleware.js位置。
3. 额外验证点(解决前两个问题后仍无效果时检查)
- 重启开发服务器:修改中间件文件后,必须重启Next.js开发服务才能让变更生效,热重载对中间件不生效。
- 检查matcher配置:如果你的
/test是动态路由(比如/test/[id]),当前的['/test']只会精确匹配/test路径,若需要匹配所有以/test开头的路径,可改成['/test/:path*']。 - 确认中间件是否启用:检查
next.config.js中是否有experimental: { middleware: false }的配置,若有需改为true(12.2.2版本默认是启用状态,但旧配置可能残留)。
验证步骤
- 将
middleware.js移动到项目根目录 - 添加上
NextResponse的导入语句 - 重启开发服务器
- 再次访问
/test,此时应该会自动重定向到/路径
内容的提问来源于stack exchange,提问作者strangeQuirks
相关产品推荐
相关产品推荐

