next.js/test/e2e/app-dir/optimistic-routing/proxy.ts
proxy.ts36 lines1.2 KB
import { NextResponse } from 'next/server'
import type { NextRequest } from 'next/server'

export function proxy(request: NextRequest) {
  const pathname = request.nextUrl.pathname

  // Rewrite /rewritten/[slug] to /actual/[slug]
  // This creates a mismatch between URL and route structure that should
  // mark the route as having a dynamic rewrite.
  if (pathname.startsWith('/rewritten/')) {
    const slug = pathname.replace('/rewritten/', '')
    const url = request.nextUrl.clone()
    url.pathname = `/actual/${slug}`
    return NextResponse.rewrite(url)
  }

  // Rewrite /search-rewrite?v=alpha to /rewrite-alpha
  // Rewrite /search-rewrite?v=beta to /rewrite-beta
  // This tests that search param rewrites are correctly detected.
  // The destination pages are fully static, so if we incorrectly use a cached
  // pattern, we'd show the wrong content.
  if (pathname === '/search-rewrite') {
    const v = request.nextUrl.searchParams.get('v')
    const url = request.nextUrl.clone()
    url.pathname = v === 'beta' ? '/rewrite-beta' : '/rewrite-alpha'
    url.searchParams.delete('v')
    return NextResponse.rewrite(url)
  }

  return NextResponse.next()
}

export const config = {
  matcher: ['/rewritten/:path*', '/search-rewrite'],
}
Quest for Codev2.0.0
/
SIGN IN