Next.js Middleware Matcher重定向失效求助:/admin跳转/login失败
问题分析与修复
你的重定向逻辑未生效的核心原因是错误地将NextURL对象与字符串进行比较:request.nextUrl.clone()返回的是一个NextURL实例对象,不是单纯的路径字符串,所以if (url === '/admin')这个判断永远不会成立,重定向代码根本没执行。
修复后的代码
import { NextResponse } from 'next/server'; export function middleware(request) { // 直接读取请求的路径,仅修改URL时才需要clone if (request.nextUrl.pathname === '/admin') { return NextResponse.redirect(new URL('/login', request.url)); } return NextResponse.next(); } export const config = { matcher: ['/admin', '/dashboard/:path*'], };
额外验证点
- 确认middleware文件位置正确:
- App Router项目:放在
app/middleware.js(或.ts) - Pages Router项目:放在
pages/_middleware.js(或.ts)
- App Router项目:放在
- 测试前清空浏览器缓存,避免旧路由缓存干扰结果
- 检查是否有其他路由规则或残留代码影响重定向逻辑
内容的提问来源于stack exchange,提问作者oliviarizona
相关产品推荐
相关产品推荐

