Next.js中间件未运行
我正在尝试使用next.js middleware,我遇到了需要两个重定向的情况。一个用于将桌面URL更改为移动的URL,另一个用于更改URL中的searchParams。
第一个是根/顶中间件,第二个是路由较低的中间件。我不知道为什么,但是当桌面中间件在SearchParams中间件之前执行时,SearchParams中间件没有运行。不应该同时运行两个?
桌面重写:
export async function middleware(req: NextRequest) {
const { pathname } = req.nextUrl
const userAgent = req.headers.get('user-agent')
if (matchDesktop(pathname, userAgent)) {
return NextResponse.rewrite(`/desktop${req.nextUrl.pathname}`)
}
}
SearchParams过滤器重写:
export function middleware(req: NextRequest) {
const { pathname, origin } = req.nextUrl
const page = req.nextUrl.searchParams.get('page') || DEFAULT_PAGE
const sortBy = req.nextUrl.searchParams.get('sortBy') || DEFAULT_SORT_BY
return NextResponse.rewrite(`${origin}${pathname}${page}/${sortBy}`)
}
文件夹结构
**桌面中间件:**pages > _middleware.ts
**SearchParams中间件:**pages > store > category > _middleware.ts
1条答案
按热度按时间flvtvl501#
不能重写两次
我在这里做的不是重定向,而是重写。
我不知道为什么,但我发现这是不可能做两个重定向,我认为他们不遵循正常访问的整个流程,所以第二个它永远不会达到。
这样做的方法是使用
NextResponse.redirect
**而不是NextResponse.rewrite
。一定要这样做,因为可以破坏你的SEO。
Next.js 12.2以上版本
从Next.js 12.2开始,您只能使用单个middleware.js文件,该文件需要与pages文件夹处于同一级别。