From d0490e06feb1df3293f35cd53d509085aa759ce0 Mon Sep 17 00:00:00 2001
From: adevopg
Date: Tue, 14 Jul 2026 15:18:06 +0000
Subject: [PATCH] URLs con barra final (trailingSlash) como el sitio original
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
next.config: trailingSlash true → /es redirige a /es/ y los enlaces se generan
con barra. Se ajustan a barra final los destinos internos que se enlazan a mano
(logout /log-out/ y su redirect, y los window.location.assign de login/
select-account) para evitar el salto 308 extra.
Co-Authored-By: Claude Opus 4.8 (1M context)
---
web-next/app/[locale]/log-out/route.ts | 2 +-
web-next/app/[locale]/login/LoginForm.tsx | 2 +-
web-next/app/[locale]/select-account/SelectAccountForm.tsx | 2 +-
web-next/components/SiteHeader.tsx | 2 +-
web-next/next.config.ts | 3 ++-
5 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/web-next/app/[locale]/log-out/route.ts b/web-next/app/[locale]/log-out/route.ts
index e92c812..2bdf192 100644
--- a/web-next/app/[locale]/log-out/route.ts
+++ b/web-next/app/[locale]/log-out/route.ts
@@ -18,5 +18,5 @@ export async function GET(_request: Request, { params }: { params: Promise<{ loc
const session = await getSession()
session.destroy()
- return new NextResponse(null, { status: 303, headers: { Location: `/${loc}` } })
+ return new NextResponse(null, { status: 303, headers: { Location: `/${loc}/` } })
}
diff --git a/web-next/app/[locale]/login/LoginForm.tsx b/web-next/app/[locale]/login/LoginForm.tsx
index 1efc234..0378039 100644
--- a/web-next/app/[locale]/login/LoginForm.tsx
+++ b/web-next/app/[locale]/login/LoginForm.tsx
@@ -38,7 +38,7 @@ export function LoginForm() {
// Navegación completa (no del lado cliente): fuerza que el servidor
// re-renderice el layout/cabecera con la sesión nueva. Con router.push
// el layout persiste y la cabecera seguía mostrando "Conectar".
- window.location.assign(`/${locale}${data.needsSelection ? '/select-account' : '/my-account'}`)
+ window.location.assign(`/${locale}${data.needsSelection ? '/select-account/' : '/my-account/'}`)
return
} else {
const key = (ERROR_KEYS as readonly string[]).includes(data.error ?? '') ? data.error! : 'genericError'
diff --git a/web-next/app/[locale]/select-account/SelectAccountForm.tsx b/web-next/app/[locale]/select-account/SelectAccountForm.tsx
index 0eb5ea1..535b5b0 100644
--- a/web-next/app/[locale]/select-account/SelectAccountForm.tsx
+++ b/web-next/app/[locale]/select-account/SelectAccountForm.tsx
@@ -28,7 +28,7 @@ export function SelectAccountForm({ accounts }: { accounts: GameAccount[] }) {
})
const data: { success?: boolean } = await res.json()
// Navegación completa: re-renderiza el layout/cabecera con la cuenta ya elegida.
- if (data.success) window.location.assign(`/${locale}/my-account`)
+ if (data.success) window.location.assign(`/${locale}/my-account/`)
else {
setError(t('error'))
setBusy(null)
diff --git a/web-next/components/SiteHeader.tsx b/web-next/components/SiteHeader.tsx
index d14ee71..b6a7fe6 100644
--- a/web-next/components/SiteHeader.tsx
+++ b/web-next/components/SiteHeader.tsx
@@ -118,7 +118,7 @@ export function SiteHeader({
MI CUENTA
- DESCONECTAR
+ DESCONECTAR
diff --git a/web-next/next.config.ts b/web-next/next.config.ts
index a8b2d2e..72ff0e1 100644
--- a/web-next/next.config.ts
+++ b/web-next/next.config.ts
@@ -4,7 +4,8 @@ import createNextIntlPlugin from 'next-intl/plugin'
const withNextIntl = createNextIntlPlugin('./i18n/request.ts')
const nextConfig: NextConfig = {
- /* config options here */
+ // URLs con barra final (/es/ en vez de /es), como el sitio original.
+ trailingSlash: true,
}
export default withNextIntl(nextConfig)