Files
Inna 3af7f5e804 Armería: muñeco de papel, talentos, actividad y caché del visor 3D
La ficha de personaje pasa a mostrar el equipo sobre el paperdoll (con
encantamientos y gemas en los tooltips de wowhead), el árbol de talentos y
la actividad reciente del personaje.

El proxy de /modelviewer/* deja de ser un rewrite de Next y pasa a un route
handler que cachea en disco los assets de zamimg, para no repetir la descarga
en cada visita.
2026-07-16 21:07:39 +00:00

34 lines
1.2 KiB
TypeScript

import createMiddleware from 'next-intl/middleware'
import { NextResponse, type NextRequest } from 'next/server'
import { routing } from './i18n/routing'
const intlMiddleware = createMiddleware(routing)
// Raíces de idioma: «/es», «/en». Estas SÍ llevan barra final; el resto NO.
const LOCALE_ROOTS = new Set(routing.locales.map((l) => `/${l}`))
export default function middleware(request: NextRequest) {
const { pathname } = request.nextUrl
// 1) Raíz de idioma sin barra → con barra: /es → /es/
if (LOCALE_ROOTS.has(pathname)) {
const url = new URL(request.url)
url.pathname = `${pathname}/`
return NextResponse.redirect(url)
}
// 2) Sub-ruta con barra final → sin barra (la raíz /es/ se conserva): /es/x/ → /es/x
if (pathname.length > 1 && pathname.endsWith('/') && !LOCALE_ROOTS.has(pathname.slice(0, -1))) {
const url = new URL(request.url)
url.pathname = pathname.replace(/\/+$/, '')
return NextResponse.redirect(url)
}
return intlMiddleware(request)
}
export const config = {
// Aplica a todo salvo /api, estáticos de Next e ipas con extensión.
matcher: ['/((?!api|modelviewer|_next|_vercel|.*\\..*).*)'],
}