From 4c2d9d6dd1e8cf4a41da37826f3e9b84802ec8dd Mon Sep 17 00:00:00 2001 From: Richard Harris Date: Tue, 7 Mar 2023 10:55:44 -0500 Subject: [PATCH 1/2] redirect when previewing prerendered pages - closes #8839 --- .changeset/happy-panthers-leave.md | 5 ++++ .../kit/src/exports/vite/preview/index.js | 27 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 .changeset/happy-panthers-leave.md diff --git a/.changeset/happy-panthers-leave.md b/.changeset/happy-panthers-leave.md new file mode 100644 index 000000000000..4c4f8b6dad9f --- /dev/null +++ b/.changeset/happy-panthers-leave.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: redirect to path with/without trailing slash when previewing prerendered pages diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index f70024bce238..fbf08ffe7326 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -108,8 +108,31 @@ export async function preview(vite, vite_config, svelte_config) { let prerendered = is_file(filename); if (!prerendered) { - filename += filename.endsWith('/') ? 'index.html' : '.html'; - prerendered = is_file(filename); + const has_trailing_slash = pathname.endsWith('/'); + const html_filename = `${filename}${has_trailing_slash ? 'index.html' : '.html'}`; + + let redirect; + + if (is_file(html_filename)) { + filename = html_filename; + prerendered = true; + } else if (has_trailing_slash) { + if (is_file(filename.slice(0, -1) + '.html')) { + redirect = pathname.slice(0, -1); + } + } else if (is_file(filename + '/index.html')) { + redirect = pathname + '/'; + } + + if (redirect) { + res.writeHead(308, { + location: redirect + }); + + res.end(); + + return; + } } if (prerendered) { From 3cff8d654fbed4447d13592dda0fadced651f8ea Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 8 Mar 2023 09:47:03 -0500 Subject: [PATCH 2/2] Update packages/kit/src/exports/vite/preview/index.js --- packages/kit/src/exports/vite/preview/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/exports/vite/preview/index.js b/packages/kit/src/exports/vite/preview/index.js index fbf08ffe7326..326818c3b181 100644 --- a/packages/kit/src/exports/vite/preview/index.js +++ b/packages/kit/src/exports/vite/preview/index.js @@ -125,7 +125,7 @@ export async function preview(vite, vite_config, svelte_config) { } if (redirect) { - res.writeHead(308, { + res.writeHead(307, { location: redirect });