diff --git a/packages/playground/html/__tests__/html.spec.ts b/packages/playground/html/__tests__/html.spec.ts index 97f64fc010789b..ed1ae6e91ad71e 100644 --- a/packages/playground/html/__tests__/html.spec.ts +++ b/packages/playground/html/__tests__/html.spec.ts @@ -85,3 +85,12 @@ describe('nested', () => { testPage(true) }) + +describe('nested w/ query', () => { + beforeAll(async () => { + // viteTestUrl is globally injected in scripts/jestPerTestSetup.ts + await page.goto(viteTestUrl + '/nested/index.html?v=1') + }) + + testPage(true) +}) diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index bec271450cf088..ff76d6bdf886ac 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -12,6 +12,7 @@ import { import { ViteDevServer } from '../..' import { send } from '../send' import { CLIENT_PUBLIC_PATH, FS_PREFIX } from '../../constants' +import { cleanUrl } from '../../utils' const devHtmlHook: IndexHtmlTransformHook = (html, { path }) => { let index = -1 @@ -51,16 +52,14 @@ export function indexHtmlMiddleware( const [preHooks, postHooks] = resolveHtmlTransforms(plugins) return async (req, res, next) => { + const url = req.url && cleanUrl(req.url) // spa-fallback always redirects to /index.html - if ( - req.url?.endsWith('.html') && - req.headers['sec-fetch-dest'] !== 'script' - ) { + if (url?.endsWith('.html') && req.headers['sec-fetch-dest'] !== 'script') { let filename - if (req.url!.startsWith(FS_PREFIX)) { - filename = req.url.slice(FS_PREFIX.length) + if (url.startsWith(FS_PREFIX)) { + filename = url.slice(FS_PREFIX.length) } else { - filename = path.join(server.config.root, req.url!.slice(1)) + filename = path.join(server.config.root, url.slice(1)) } if (fs.existsSync(filename)) { try { @@ -68,7 +67,7 @@ export function indexHtmlMiddleware( // apply transforms html = await applyHtmlTransforms( html, - req.url!, + url, filename, [...preHooks, devHtmlHook, ...postHooks], server