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', () => {