diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 77b91a4dfd6dba..e919302e1d0412 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -53,7 +53,7 @@ import type { WebSocketServer } from './ws' import { createWebSocketServer } from './ws' import { baseMiddleware } from './middlewares/base' import { proxyMiddleware } from './middlewares/proxy' -import { spaFallbackMiddleware } from './middlewares/spaFallback' +import { htmlFallbackMiddleware } from './middlewares/htmlFallback' import { transformMiddleware } from './middlewares/transform' import { createDevHtmlTransformFn, @@ -560,9 +560,9 @@ export async function createServer( middlewares.use(serveRawFsMiddleware(server)) middlewares.use(serveStaticMiddleware(root, server)) - // spa fallback - if (config.appType === 'spa') { - middlewares.use(spaFallbackMiddleware(root)) + // html fallback + if (config.appType === 'spa' || config.appType === 'mpa') { + middlewares.use(htmlFallbackMiddleware(root, config.appType === 'spa')) } // run post config hooks diff --git a/packages/vite/src/node/server/middlewares/spaFallback.ts b/packages/vite/src/node/server/middlewares/htmlFallback.ts similarity index 65% rename from packages/vite/src/node/server/middlewares/spaFallback.ts rename to packages/vite/src/node/server/middlewares/htmlFallback.ts index 6f5b645cd02429..314f4ec2a63e7f 100644 --- a/packages/vite/src/node/server/middlewares/spaFallback.ts +++ b/packages/vite/src/node/server/middlewares/htmlFallback.ts @@ -4,11 +4,12 @@ import history from 'connect-history-api-fallback' import type { Connect } from 'dep-types/connect' import { createDebugger } from '../../utils' -export function spaFallbackMiddleware( - root: string +export function htmlFallbackMiddleware( + root: string, + spaFallback: boolean ): Connect.NextHandleFunction { - const historySpaFallbackMiddleware = history({ - logger: createDebugger('vite:spa-fallback'), + const historyHtmlFallbackMiddleware = history({ + logger: createDebugger('vite:html-fallback'), // support /dir/ without explicit index.html rewrites: [ { @@ -20,7 +21,9 @@ export function spaFallbackMiddleware( if (fs.existsSync(path.join(root, rewritten))) { return rewritten } else { - return `/index.html` + if (spaFallback) { + return `/index.html` + } } } } @@ -28,7 +31,7 @@ export function spaFallbackMiddleware( }) // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...` - return function viteSpaFallbackMiddleware(req, res, next) { - return historySpaFallbackMiddleware(req, res, next) + return function viteHtmlFallbackMiddleware(req, res, next) { + return historyHtmlFallbackMiddleware(req, res, next) } } diff --git a/packages/vite/src/node/server/middlewares/indexHtml.ts b/packages/vite/src/node/server/middlewares/indexHtml.ts index 199468727c17c2..8c036629bcf26e 100644 --- a/packages/vite/src/node/server/middlewares/indexHtml.ts +++ b/packages/vite/src/node/server/middlewares/indexHtml.ts @@ -283,7 +283,7 @@ export function indexHtmlMiddleware( } const url = req.url && cleanUrl(req.url) - // spa-fallback always redirects to /index.html + // htmlFallbackMiddleware appends '.html' to URLs if (url?.endsWith('.html') && req.headers['sec-fetch-dest'] !== 'script') { const filename = getHtmlFilename(url, server) if (fs.existsSync(filename)) {