Files
sucupira 3e60f48c5e feat: support du déploiement sous sous-chemin (paths.base)
- Liens et assets via {base}, polices déplacées vers src/lib/assets (hachage Vite)
- Service worker base-aware, précache sur les pages prérendues
- CSP hash documentée : l'hôte ne doit pas fixer script-src
- Docs : déploiement Apache/YunoHost (DEPLOYMENT, APACHE_AUTOINDEX)
2026-07-21 13:41:10 -04:00

2.2 KiB

Piège Apache (o2switch) : « Index of /… » au lieu des pages

Symptôme : le site est déployé sur un hébergement mutualisé Apache (o2switch), la page d'accueil s'affiche, mais cliquer sur un lien interne affiche « Index of /chatcontrol/quiz » (un listing de dossier) au lieu de la page.

Cause : conflit fichier / dossier

SvelteKit (adapter-static, trailingSlash par défaut = 'never') génère :

build/
├── quiz.html          ← la page
├── quiz/              ← dossier créé pour __data.json
│   └── __data.json
├── outils.html
├── outils/
│   └── …

Quand le navigateur demande /chatcontrol/quiz, Apache voit qu'un dossier quiz/ existe et redirige (301) vers /chatcontrol/quiz/. Comme ce dossier ne contient pas de index.html, Apache sert son autoindex (le listing). Le fichier quiz.html, lui, n'est jamais trouvé.

Apache donne toujours la priorité au dossier quand les deux existent — ce problème revient à chaque site statique posé sur du mutualisé Apache.

Correctif (déjà appliqué dans ce dépôt)

frontend/src/routes/+layout.ts :

export const trailingSlash = 'always'

Chaque page est alors générée dans son dossier :

build/
├── quiz/
│   ├── index.html     ← la page, servie par Apache
│   └── __data.json
├── outils/
│   ├── index.html
│   └── aegis/
│       └── index.html

Plus de conflit possible : le dossier existe, il contient un index.html, Apache le sert.

Checklist quand ça arrive

  1. export const trailingSlash = 'always' dans le +layout.ts racine.
  2. pnpm build → vérifier que build/quiz/index.html existe (et non build/quiz.html).
  3. Vider le dossier distant avant de re-uploader : les anciens quiz.html / outils.html et les vieux assets _app/immutable/ hashés doivent partir, sinon ils traînent indéfiniment.
  4. Tester curl -s https://<site>/<page>/ → du HTML, pas « Index of ».

Note : les liens internes relatifs (./outils) provoquent une petite redirection 301 vers l'URL avec / final. Normal, invisible pour l'utilisateur. L'éviter exigerait paths.relative: false, au prix de la consultation locale des fichiers du build.