From 740eb6019f405781a3918941d3bfb34a7bda1a3d Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Thu, 30 Jan 2025 16:04:07 +0000 Subject: [PATCH] fix: exclude Vite requests from trailing slash handling (#13095) * fix: exclude Vite requests from trailing slash handling * Add test * remove extraneous config file * Update changeset --- .changeset/large-waves-cheat.md | 5 +++++ .../astro/src/vite-plugin-astro-server/trailing-slash.ts | 3 +++ packages/astro/test/ssr-error-pages.test.js | 6 ++++++ 3 files changed, 14 insertions(+) create mode 100644 .changeset/large-waves-cheat.md diff --git a/.changeset/large-waves-cheat.md b/.changeset/large-waves-cheat.md new file mode 100644 index 0000000000..bd61307b3d --- /dev/null +++ b/.changeset/large-waves-cheat.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes a bug that caused some dev server asset requests to return 404 when trailingSlash was set to "always" diff --git a/packages/astro/src/vite-plugin-astro-server/trailing-slash.ts b/packages/astro/src/vite-plugin-astro-server/trailing-slash.ts index fff8d31178..1872214cfe 100644 --- a/packages/astro/src/vite-plugin-astro-server/trailing-slash.ts +++ b/packages/astro/src/vite-plugin-astro-server/trailing-slash.ts @@ -22,6 +22,9 @@ export function trailingSlashMiddleware(settings: AstroSettings): vite.Connect.N /* malformed uri */ return next(e); } + if(pathname.startsWith('/_') || pathname.startsWith('/@')) { + return next(); + } if ( (trailingSlash === 'never' && pathname.endsWith('/') && pathname !== '/') || (trailingSlash === 'always' && !pathname.endsWith('/') && !hasFileExtension(pathname)) diff --git a/packages/astro/test/ssr-error-pages.test.js b/packages/astro/test/ssr-error-pages.test.js index 61335574d2..0ffb7ddbd7 100644 --- a/packages/astro/test/ssr-error-pages.test.js +++ b/packages/astro/test/ssr-error-pages.test.js @@ -169,6 +169,12 @@ describe('trailing slashes for error pages', () => { const $ = cheerio.load(html); assert.equal($('h1').text(), `Something went horribly wrong!`); }); + + it('serves Vite assets correctly when trailingSlash is always', async () => { + const response = await fixture.fetch('/@vite/client'); + assert.equal(response.status, 200); + }); + }); describe('Production', () => {