Files
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

67 lines
2.2 KiB
Markdown

# 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` :
```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.