diff --git a/packages/console/app/src/middleware.ts b/packages/console/app/src/middleware.ts index e9fb86548e9..4aa2148f711 100644 --- a/packages/console/app/src/middleware.ts +++ b/packages/console/app/src/middleware.ts @@ -13,6 +13,18 @@ export default createMiddleware({ url.pathname = strip(url.pathname) if (/^\/changelog\/?$/.test(url.pathname)) return new Response(null, { status: 301, headers: { Location: "/changelog" } }) + // English pages live at unprefixed URLs, so /en/... would be a duplicate of every page. + // /data keeps /en because it redirects unprefixed visits by cookie and Accept-Language. + // Collapse leading slashes so /en//example.com can't become a protocol-relative redirect. + if ( + locale === "en" && + (event.request.method === "GET" || event.request.method === "HEAD") && + !/^\/data(\/|$)/.test(url.pathname) + ) + return new Response(null, { + status: 301, + headers: { Location: `${url.pathname.replace(/^\/+/, "/")}${url.search}` }, + }) const request = new Request(url, event.request) request.headers.set(LOCALE_HEADER, locale) event.request = request