Next.js Middlewares报错URLs is malformed请仅使用绝对URL
报错原因
NextResponse.redirect() 方法强制要求传入绝对URL作为跳转目标,你的代码中直接传入了相对路径"/login",不符合参数规则,因此触发格式错误报错。
你代码中已经从req.nextUrl解构拿到了当前请求的origin(站点域名+协议部分),可以直接用它拼接生成合法的跳转地址。
修复代码
将重定向逻辑改为通过new URL()构造绝对地址即可,修改后完整代码:
const token = await getToken({req,secret:process.env.JWT_SECRET}); const {pathname, origin} = req.nextUrl; if(pathname?.includes('/api/auth') || token){ return NextResponse.next(); }; if (!token && pathname !== "/login") { return NextResponse.redirect(new URL('/login', origin)); }
注意事项
- 不要直接用字符串模板拼接
${origin}/login传入,通过new URL()构造地址会自动处理origin末尾斜杠、特殊字符转义等边界问题,兼容性更好。 - 后续中间件里的其他重定向逻辑,都要遵循「必须传绝对URL」的规则,避免同类报错。
内容的提问来源于stack exchange,提问作者reactHelpzzzz
相关产品推荐
相关产品推荐

