3af7f5e804
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.
34 lines
1.2 KiB
TypeScript
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|.*\\..*).*)'],
|
|
}
|