Files
oki-atlas-fediverse/APACHE_AUTOINDEX.md
sucupira 93c577c5d3 chore: état initial avant refonte (atlas SvelteKit v4.0.0)
Snapshot de l'existant avant application du playbook OKI :
background shader Three.js, carte graphe 3D, timeline statique.
2026-07-21 13:10:12 -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.