Next.js中间件里怎么获取请求的URL路径?

W″淑萍 阅读 5

我在写Next.js的middleware时,想根据用户访问的路径做不同处理,但不知道怎么拿到当前请求的URL。试了req.url但好像不是标准格式,还带上了查询参数,搞得判断很麻烦。

比如我想拦截所有/admin开头的路径,但下面这段代码好像没生效:

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

export function middleware(req: NextRequest) {
  if (req.url.includes('/admin')) {
    return NextResponse.redirect(new URL('/login', req.url));
  }
}
我来解答 赞 3 收藏
二维码
手机扫码查看
1 条解答
Mr.圣贤
Mr.圣贤 Lv1
凌晨三点看到这问题,太熟悉了。用req.nextUrl.pathname拿纯路径,别用req.url,那个是完整URL带域名和参数的,解析起来要命。

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

export function middleware(req: NextRequest) {
const path = req.nextUrl.pathname;

if (path.startsWith('/admin')) {
return NextResponse.redirect(new URL('/login', req.url));
}
}


req.nextUrl是Next.js帮你解析好的URL对象,pathname、searchParams这些属性都有,直接用就行。判断路径匹配用startsWithincludes靠谱,不然/user/admin-setting这种也会被误伤。
点赞
2026-03-01 10:22