Files
lage-chat-control/docs/APACHE_AUTOINDEX.md
T
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

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.