- 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)
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
export const trailingSlash = 'always'dans le+layout.tsracine.pnpm build→ vérifier quebuild/quiz/index.htmlexiste (et nonbuild/quiz.html).- Vider le dossier distant avant de re-uploader : les anciens
quiz.html/outils.htmlet les vieux assets_app/immutable/hashés doivent partir, sinon ils traînent indéfiniment. - 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.