From f81fb44469bd9d90640576a2aa92bf7caf18a6b4 Mon Sep 17 00:00:00 2001 From: johan sh Date: Wed, 11 Jun 2025 17:01:01 +0200 Subject: [PATCH] fix: allow prerendering with a basename set to work alongside ssr:false the normalized (including basename) was compared with the prerender-entry, which does not have a basename --- contributors.yml | 1 + .../react-router/lib/server-runtime/server.ts | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/contributors.yml b/contributors.yml index a603914de0..aa43af6c97 100644 --- a/contributors.yml +++ b/contributors.yml @@ -401,3 +401,4 @@ - zeromask1337 - zheng-chuang - zxTomw +- skrhlm diff --git a/packages/react-router/lib/server-runtime/server.ts b/packages/react-router/lib/server-runtime/server.ts index 5bbe24e801..3a0c11cc14 100644 --- a/packages/react-router/lib/server-runtime/server.ts +++ b/packages/react-router/lib/server-runtime/server.ts @@ -166,6 +166,16 @@ export const createRequestHandler: CreateRequestHandlerFunction = ( normalizedPath = normalizedPath.slice(0, -1); } + let pathForPrerenderCheck = stripBasename( + normalizedPath, + normalizedBasename + ); + + // handle root path + if (pathForPrerenderCheck === "/") { + pathForPrerenderCheck = ""; + } + let isSpaMode = getBuildTimeHeader(request, "X-React-Router-SPA-Mode") === "yes"; @@ -178,8 +188,9 @@ export const createRequestHandler: CreateRequestHandlerFunction = ( // ssr:false and no prerender config indicates "SPA Mode" isSpaMode = true; } else if ( - !_build.prerender.includes(normalizedPath) && - !_build.prerender.includes(normalizedPath + "/") + pathForPrerenderCheck !== null && + !_build.prerender.includes(pathForPrerenderCheck) && + !_build.prerender.includes(pathForPrerenderCheck + "/") ) { if (url.pathname.endsWith(".data")) { // 404 on non-pre-rendered `.data` requests