#Personalizar templates por subdominios

1 messages · Page 1 of 1 (latest)

slow relic
#

Hola chicos estoy haciendo un servicio que requiere que cada cliente tenga su propio sitio web del tipo multi-tenant.

Hasta ahora lo que he investigado hice un middleware:

import { NextResponse } from 'next/server'

const SUBDOMAINS = [{ subdomain: 'customer1' }, { subdomain: 'customer2' }]
const ALLOWED_DOMAINS = ['localhost:3000', 'mydomain.app']

export const config = {
  matcher: [
    '/((?!api/|_next/|_static/|_vercel|[\\w-]+\\.\\w+).*)'
  ]
}
export default async function middleware (req) {
  const url = req.nextUrl
  const hostname = req.headers.get('host')
  const subdomain = hostname.split('.')[0]

  const isAllowedDomain = ALLOWED_DOMAINS.some(domain => hostname.includes(domain))

  if (isAllowedDomain && !SUBDOMAINS.some(d => d.subdomain === subdomain)) {
    return NextResponse.next()
  }

  return NextResponse.rewrite(new URL(`/${subdomain}${url.pathname}`, req.url))
}

Y luego en mi estructura de directorios tengo en un [subdomain]

├── src
│    ├── app
│    │   ├── middleware.js
│    │   ├── [subdomain]
│    │   │   └── page.jsx

El tema que para recuperar el nombre del subdominio en el page de [subdomain] lo hacen de esta forma en la guía que conseguí:

'use client'

import { useParams } from 'next/navigation'

export default function Component () {
  const params = useParams()
  const tenant = params.subdomain
  console.log(tenant)

  return (
    <h1>Hola {tenant}</h1>
  )
}

y se pierde el SSR y precisamente como es una página que será publica una especie de landing page necesitamos aprovechar lo mejor posible el SEO y con ello el SSR.