From 506cff32e2fd293a7be7cda8d2ed9b94586b3914 Mon Sep 17 00:00:00 2001 From: Ming-jun Lu <40516784+mingjunlu@users.noreply.github.com> Date: Wed, 13 Mar 2024 12:26:56 +0800 Subject: [PATCH 1/2] fix: fix an issue where certain characters break redirects in SSR --- packages/astro/src/core/redirects/render.ts | 2 +- packages/astro/test/redirects.test.js | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/astro/src/core/redirects/render.ts b/packages/astro/src/core/redirects/render.ts index 120fab26e4c8..24361fde471f 100644 --- a/packages/astro/src/core/redirects/render.ts +++ b/packages/astro/src/core/redirects/render.ts @@ -8,7 +8,7 @@ export async function renderRedirect(renderContext: RenderContext) { const { redirect, redirectRoute } = routeData; const status = redirectRoute && typeof redirect === 'object' ? redirect.status : method === 'GET' ? 301 : 308; - const headers = { location: redirectRouteGenerate(renderContext) }; + const headers = { location: encodeURI(redirectRouteGenerate(renderContext)) }; return new Response(null, { status, headers }); } diff --git a/packages/astro/test/redirects.test.js b/packages/astro/test/redirects.test.js index ab3a3eb37ed9..464cced09f50 100644 --- a/packages/astro/test/redirects.test.js +++ b/packages/astro/test/redirects.test.js @@ -98,6 +98,16 @@ describe('Astro.redirect', () => { const response = await app.render(request); assert.equal(response.headers.get('Location'), '/not-verbatim/target3/x/y/z'); }); + + it('Forwards params to the target path - special characters', async () => { + const app = await fixture.loadTestAdapterApp(); + const request = new Request('http://example.com/source/Las Vegas’'); + const response = await app.render(request); + assert.equal( + response.headers.get('Location'), + '/not-verbatim/target1/Las%20Vegas%E2%80%99' + ); + }); }); }); From b6ccabf2ba936f86ab74aa1ae0cb06200470cde9 Mon Sep 17 00:00:00 2001 From: Ming-jun Lu <40516784+mingjunlu@users.noreply.github.com> Date: Wed, 13 Mar 2024 12:27:22 +0800 Subject: [PATCH 2/2] chore: add changeset --- .changeset/yellow-clocks-greet.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/yellow-clocks-greet.md diff --git a/.changeset/yellow-clocks-greet.md b/.changeset/yellow-clocks-greet.md new file mode 100644 index 000000000000..37a8995d4771 --- /dev/null +++ b/.changeset/yellow-clocks-greet.md @@ -0,0 +1,5 @@ +--- +"astro": patch +--- + +Fixes an issue where certain characters break redirects in SSR.