# Domaines tenants

SALSABIL Madrassas utilise une seule application Symfony/Twig pour toutes les écoles. Chaque école peut répondre sur un domaine canonique et sur un ou plusieurs alias.

## Domaine canonique

Le domaine canonique est le domaine officiel utilisé pour générer les URLs publiques d’une école et pour stabiliser le référencement.

Exemple Daroul-Ilm :

```txt
darulilm.salsabil.cm
```

Dans le MVP, le champ `sousDomaine` de `Ecole` reste la source simple pour générer le domaine canonique avec `APP_PUBLIC_DOMAIN`.

```dotenv
APP_PUBLIC_DOMAIN=salsabil.cm
APP_PLATFORM_HOST=madrassas.salsabil.cm
APP_SCHEME=https
```

Avec `sousDomaine=darulilm`, le domaine canonique est :

```txt
darulilm.salsabil.cm
```

Le domaine est aussi stocké dans `tenant_domains` avec `canonical=1`, ce qui prépare les futurs domaines personnalisés.

## Alias

Un alias est un ancien domaine ou un domaine secondaire qui doit continuer à fonctionner. Quand un visiteur arrive par un alias, l’application résout l’école puis redirige en 301 vers le domaine canonique en conservant le chemin et les paramètres de query string.

Exemple :

```txt
https://daroulilm.salsabil.cm/inscription?token=abc
```

redirige vers :

```txt
https://darulilm.salsabil.cm/inscription?token=abc
```

Pour ajouter un alias depuis l’interface super-admin :

1. Aller dans `Platform > Écoles`.
2. Modifier l’école.
3. Renseigner un host par ligne dans `Alias de domaines`.
4. Ne pas saisir `https://`, ni chemin, ni query string.

Exemple :

```txt
daroulilm.salsabil.cm
ancien-domaine.cm
```

## DNS et cPanel

Pour un sous-domaine comme `darulilm.salsabil.cm` ou `daroulilm.salsabil.cm`, créer dans la zone DNS :

```txt
Type: A
Nom: darulilm
Valeur: IP du serveur qui héberge Symfony
```

ou, si l’hébergement le permet :

```txt
Type: CNAME
Nom: darulilm
Valeur: madrassas.salsabil.cm
```

Dans cPanel, ajouter le sous-domaine ou l’alias de domaine afin qu’il pointe vers le même document root que l’application Symfony, généralement le dossier `public/`.

## SSL

Le certificat SSL doit être installé sur le serveur qui sert réellement le domaine.

Même si `daroulilm.salsabil.cm` redirige immédiatement vers `darulilm.salsabil.cm`, le navigateur commence par établir une connexion HTTPS avec `daroulilm.salsabil.cm`. Sans certificat valide sur ce host, l’utilisateur verra une erreur SSL avant que Symfony puisse répondre avec la redirection.

Il faut donc couvrir :

```txt
madrassas.salsabil.cm
darulilm.salsabil.cm
daroulilm.salsabil.cm
alqamar.salsabil.cm
```

ou utiliser un certificat wildcard :

```txt
*.salsabil.cm
```
