From 01e9ac0222dcc36c075c25e3fe8f7e8881867e9c Mon Sep 17 00:00:00 2001 From: Evan You Date: Sat, 23 Jan 2021 14:21:51 -0500 Subject: [PATCH] fix: revert trailing slash handling + improve dev base usage fix #1664 --- packages/playground/html/index.html | 4 ++-- packages/vite/src/node/server/index.ts | 7 ++++++- .../vite/src/node/server/middlewares/base.ts | 17 ++++++++++++++--- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/packages/playground/html/index.html b/packages/playground/html/index.html index 391521a34bb28e..b0b5947debd00c 100644 --- a/packages/playground/html/index.html +++ b/packages/playground/html/index.html @@ -1,7 +1,7 @@ - +

Hello

- + diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 557e30b1ccf5a8..5dd30944e1e384 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -406,7 +406,12 @@ export async function createServer( { from: /\/$/, to({ parsedUrl }: any) { - return parsedUrl.pathname + 'index.html' + const rewritten = parsedUrl.pathname + 'index.html' + if (fs.existsSync(path.join(root, rewritten))) { + return rewritten + } else { + return `/index.html` + } } } ] diff --git a/packages/vite/src/node/server/middlewares/base.ts b/packages/vite/src/node/server/middlewares/base.ts index 6bf124a1a4b073..7a9dddeeb893bd 100644 --- a/packages/vite/src/node/server/middlewares/base.ts +++ b/packages/vite/src/node/server/middlewares/base.ts @@ -15,13 +15,24 @@ export function baseMiddleware({ const path = parsed.pathname || '/' if (path.startsWith(base)) { - // rewrite url to remove base.. this ensures that other middleware does not need to consider base being prepended or not + // rewrite url to remove base.. this ensures that other middleware does + // not need to consider base being prepended or not req.url = url.replace(base, '/') } else if (path === '/' || path === '/index.html') { - // to prevent confusion, do not allow access at / if we have specified a base path - res.statusCode = 404 + // redirect root visit to based url + res.writeHead(302, { + Location: base + }) res.end() return + } else if (req.headers.accept?.includes('text/html')) { + // non-based page visit + res.statusCode = 404 + res.end( + `The server is configured with a public base URL of ${base} - ` + + `did you mean to visit ${base}${url.slice(1)} instead?` + ) + return } next()