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)
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user