Next.js中间件里怎么获取请求的URL路径?
我在写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));
}
}
req.nextUrl.pathname拿纯路径,别用req.url,那个是完整URL带域名和参数的,解析起来要命。req.nextUrl是Next.js帮你解析好的URL对象,pathname、searchParams这些属性都有,直接用就行。判断路径匹配用startsWith比includes靠谱,不然/user/admin-setting这种也会被误伤。