我知道有很多关于这个话题的帖子,但没有专门针对这个问题的.
我正在使用T3堆栈,当我的应用程序正在开发时,我希望所有客户端请求都被定向到特定的路由,在本例中为/signup
.
我写了这篇文章,这篇文章很管用:
export function middleware(request: NextRequest) {
const url = request.nextUrl.clone()
if (!url.pathname.startsWith('/signup') && // exlude the signup page to avoid redirect loop
!url.pathname.startsWith('/_next') && // exclude Next.js internals
!url.pathname.startsWith('/_axiom') && // exclude Axiom
!url.pathname.startsWith('/_api') && // exclude all API routes
!url.pathname.includes('.')) // exclude public files
{
url.pathname = '/signup'
return NextResponse.redirect(url)
}
}
不过,这相当复杂,如果可以的话,我宁愿使用Matcher.
我试过这个:
export function middleware(request: NextRequest) {
return NextResponse.redirect(new URL("/signup", request.url));
}
export const config = {
matcher: [
"/((?!signup|_axiom|_api|_next/static|_next/image).*)",
],
};
这似乎没有以我期望的方式获得匹配器,但是中间件和配置都被读取了.如果我删除配置,则会try 重定向,但try 次数太多会失败.
理想情况下,我希望使用与第二个选项类似的选项,特别是在条件条件变得更加复杂的情况下.
谢谢,