diff --git a/examples/app-pages-router/app/rewrite-destination/page.tsx b/examples/app-pages-router/app/rewrite-destination/page.tsx index c7ea97c3..a5392b07 100644 --- a/examples/app-pages-router/app/rewrite-destination/page.tsx +++ b/examples/app-pages-router/app/rewrite-destination/page.tsx @@ -1,3 +1,12 @@ -export default function RewriteDestination() { - return
Rewritten Destination
; +export default function RewriteDestination({ + searchParams, +}: { + searchParams: { a: string }; +}) { + return ( +
+
Rewritten Destination
+
a: {searchParams.a}
+
+ ); } diff --git a/examples/app-pages-router/middleware.ts b/examples/app-pages-router/middleware.ts index b530626d..94409675 100644 --- a/examples/app-pages-router/middleware.ts +++ b/examples/app-pages-router/middleware.ts @@ -12,6 +12,7 @@ export function middleware(request: NextRequest) { }); } else if (path === "/rewrite") { const u = new URL("/rewrite-destination", `${protocol}://${host}`); + u.searchParams.set("a", "b"); return NextResponse.rewrite(u); } else if (path === "/api/middleware") { return new NextResponse(JSON.stringify({ hello: "middleware" }), { diff --git a/packages/open-next/src/adapters/routing/middleware.ts b/packages/open-next/src/adapters/routing/middleware.ts index 5ae6c07d..34921c0f 100644 --- a/packages/open-next/src/adapters/routing/middleware.ts +++ b/packages/open-next/src/adapters/routing/middleware.ts @@ -139,8 +139,15 @@ export async function handleMiddleware( // NOTE: the header was added to `req` from above const rewriteUrl = responseHeaders.get("x-middleware-rewrite"); let rewritten = false; + let middlewareQueryString = internalEvent.query; if (rewriteUrl) { - req.url = new URL(rewriteUrl).pathname; + const rewriteUrlObject = new URL(rewriteUrl); + req.url = rewriteUrlObject.pathname; + //reset qs + middlewareQueryString = {}; + rewriteUrlObject.searchParams.forEach((v: string, k: string) => { + middlewareQueryString[k] = v; + }); rewritten = true; } @@ -164,7 +171,7 @@ export async function handleMiddleware( headers: { ...internalEvent.headers, ...reqHeaders }, body: internalEvent.body, method: internalEvent.method, - query: internalEvent.query, + query: middlewareQueryString, cookies: internalEvent.cookies, remoteAddress: internalEvent.remoteAddress, }; diff --git a/packages/tests-e2e/tests/appPagesRouter/middleware.rewrite.test.ts b/packages/tests-e2e/tests/appPagesRouter/middleware.rewrite.test.ts index 488bed86..af4f65c7 100644 --- a/packages/tests-e2e/tests/appPagesRouter/middleware.rewrite.test.ts +++ b/packages/tests-e2e/tests/appPagesRouter/middleware.rewrite.test.ts @@ -7,10 +7,13 @@ test("Middleware Rewrite", async ({ page }) => { await page.waitForURL(`/rewrite`); let el = page.getByText("Rewritten Destination", { exact: true }); await expect(el).toBeVisible(); - + el = page.getByText("a: b", { exact: true }); + await expect(el).toBeVisible(); // Loading page should also rewrite await page.goto(`/rewrite`); await page.waitForURL(`/rewrite`); el = page.getByText("Rewritten Destination", { exact: true }); await expect(el).toBeVisible(); + el = page.getByText("a: b", { exact: true }); + await expect(el).toBeVisible(); });