From 8c1a1290345cebb8842cd6116585bc6c28e32beb Mon Sep 17 00:00:00 2001 From: instantraaamen Date: Mon, 16 Mar 2026 22:24:52 +0900 Subject: [PATCH 1/2] fix(@angular/build): skip HTML fallback for dotfile requests The HTML fallback middleware currently rewrites dotfile requests (e.g., /.env, /.npmrc) to /index.html, returning 200 instead of 404. This change skips the SPA fallback when the last URL path segment starts with a dot, providing a small defense-in-depth improvement for the dev server. Made-with: Cursor --- .../tools/vite/middlewares/html-fallback-middleware.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts index cd52b8a7904f..bf299b8713cd 100644 --- a/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts @@ -27,6 +27,15 @@ export function angularHtmlFallbackMiddleware( } if (req.url) { + // No fallback for dotfile requests (e.g., .env, .npmrc) + const pathname = req.url.split('?')[0]; + const lastSegment = pathname.substring(pathname.lastIndexOf('/') + 1); + if (lastSegment.startsWith('.')) { + next(); + + return; + } + const mimeType = lookupMimeTypeFromRequest(req.url); if ( (mimeType === 'text/html' || mimeType === 'application/xhtml+xml') && From c8643ed45a00d3d360c8e2b91a554504e1921fbb Mon Sep 17 00:00:00 2001 From: instantraaamen Date: Mon, 16 Mar 2026 22:31:44 +0900 Subject: [PATCH 2/2] refactor(@angular/build): use path.posix.basename for dotfile check Apply Gemini Code Assist suggestion: use basename from node:path/posix instead of manual string manipulation. This is more readable and correctly handles trailing slashes (e.g., /.env/ -> .env). Made-with: Cursor --- .../src/tools/vite/middlewares/html-fallback-middleware.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts index bf299b8713cd..210993b8280a 100644 --- a/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts @@ -7,6 +7,7 @@ */ import type { ServerResponse } from 'node:http'; +import { basename } from 'node:path/posix'; import type { Connect } from 'vite'; import { lookupMimeTypeFromRequest } from '../utils'; @@ -29,7 +30,7 @@ export function angularHtmlFallbackMiddleware( if (req.url) { // No fallback for dotfile requests (e.g., .env, .npmrc) const pathname = req.url.split('?')[0]; - const lastSegment = pathname.substring(pathname.lastIndexOf('/') + 1); + const lastSegment = basename(pathname); if (lastSegment.startsWith('.')) { next();