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();
});