diff --git a/packages/vite/src/node/server/middlewares/transform.ts b/packages/vite/src/node/server/middlewares/transform.ts index 17dd30cd2679fc..fd96921d8ea564 100644 --- a/packages/vite/src/node/server/middlewares/transform.ts +++ b/packages/vite/src/node/server/middlewares/transform.ts @@ -56,10 +56,25 @@ export function transformMiddleware( return } - let url = decodeURI(removeTimestampQuery(req.url!)).replace( - NULL_BYTE_PLACEHOLDER, - '\0' - ) + let url + try { + url = decodeURI(removeTimestampQuery(req.url!)).replace( + NULL_BYTE_PLACEHOLDER, + '\0' + ) + } catch (err) { + // if it starts with %PUBLIC%, someone's migrating from something + // like create-react-app + let errorMessage + if (req.url?.startsWith('/%PUBLIC')) { + errorMessage = `index.html shouldn't include environment variables like %PUBLIC_URL%, see https://vitejs.dev/guide/#index-html-and-project-root for more information` + } else { + errorMessage = `Vite encountered a suspiciously malformed request ${req.url}` + } + next(new Error(errorMessage)) + return + } + const withoutQuery = cleanUrl(url) try {