diff --git a/packages/next/src/server/app-render/app-render.tsx b/packages/next/src/server/app-render/app-render.tsx index 75b0131d6af94..6f847b9f6d7d4 100644 --- a/packages/next/src/server/app-render/app-render.tsx +++ b/packages/next/src/server/app-render/app-render.tsx @@ -893,6 +893,7 @@ async function renderToHTMLOrFlightImpl( polyfills, renderServerInsertedHTML, hasPostponed, + basePath: renderOpts.basePath, }) const renderer = createStaticRenderer({ diff --git a/packages/next/src/server/app-render/make-get-server-inserted-html.tsx b/packages/next/src/server/app-render/make-get-server-inserted-html.tsx index 64b8a55cd4720..c57a3f8dd481e 100644 --- a/packages/next/src/server/app-render/make-get-server-inserted-html.tsx +++ b/packages/next/src/server/app-render/make-get-server-inserted-html.tsx @@ -8,15 +8,18 @@ import { import { renderToReadableStream } from 'react-dom/server.edge' import { streamToString } from '../stream-utils/node-web-streams-helper' import { RedirectStatusCode } from '../../client/components/redirect-status-code' +import { addPathPrefix } from '../../shared/lib/router/utils/add-path-prefix' export function makeGetServerInsertedHTML({ polyfills, renderServerInsertedHTML, + basePath, hasPostponed, }: { polyfills: JSX.IntrinsicElements['script'][] renderServerInsertedHTML: () => React.ReactNode hasPostponed: boolean + basePath: string }) { let flushedErrorMetaTagsUntilIndex = 0 // If the render had postponed, then we have already flushed the polyfills. @@ -38,7 +41,10 @@ export function makeGetServerInsertedHTML({ ) : null ) } else if (isRedirectError(error)) { - const redirectUrl = getURLFromRedirectError(error) + const redirectUrl = addPathPrefix( + getURLFromRedirectError(error), + basePath + ) const statusCode = getRedirectStatusCodeFromError(error) const isPermanent = statusCode === RedirectStatusCode.PermanentRedirect ? true : false diff --git a/test/e2e/app-dir/app-basepath/app/dynamic/[id]/loading.js b/test/e2e/app-dir/app-basepath/app/dynamic/[id]/loading.js new file mode 100644 index 0000000000000..d6e9dcd771ffb --- /dev/null +++ b/test/e2e/app-dir/app-basepath/app/dynamic/[id]/loading.js @@ -0,0 +1,4 @@ +// Have loading.js to trigger suspense boundary for /dynamic/[id] page +export default function Loading() { + return
{`id:${id}`}
+