24bb244352
Contexte : sur abonnel.fr, session_start() était appelé sur chaque
requête PHP (y compris bots), créant ~17 000 fichiers de session/jour
dans un répertoire custom non nettoyé par le cron Debian. Les workers
PHP-FPM grossissaient en mémoire et le pool saturait (1 188 erreurs
503 en 30 minutes).
Changements :
public/index.php
- session_start() uniquement si le cookie de session existe déjà ou si
la requête est POST. Les bots (GET sans cookie) ne créent plus de
session.
- CSRF commentaires migré de $_SESSION['comment_csrf'] vers un double-
submit cookie (_csrf_c, SameSite=Strict, HttpOnly). La session n'est
plus requise pour les visiteurs anonymes qui postent un commentaire.
templates/comments_section.php
- Génère le token CSRF et le pose en cookie (_csrf_c) au lieu de
l'écrire en session.
public/.htaccess
- Règle Apache 410 Gone pour toute URL contenant un paramètre ?do=
(anciens paramètres DokuWiki : do=media, do=export_pdf…). Traité par
Apache en 2ms sans toucher PHP-FPM.
public/oidc/{start,callback,me}.php
- Correction du bug introduit par 0b8077e : config.php (qui utilise
BASE_PATH) était chargé avant bootstrap.php (qui définit BASE_PATH).
Fix : define('BASE_PATH', …) ajouté avant le require config.php.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
88 lines
4.1 KiB
ApacheConf
88 lines
4.1 KiB
ApacheConf
Options -Indexes
|
|
DirectoryIndex index.php
|
|
|
|
RewriteEngine On
|
|
|
|
# Paramètres DokuWiki (?do=media, ?do=export_pdf, etc.) — 410 Gone, jamais de contenu ici
|
|
RewriteCond %{QUERY_STRING} (^|&)do= [NC]
|
|
RewriteRule ^ - [R=410,L]
|
|
|
|
# Fichiers et répertoires réels servis directement
|
|
RewriteCond %{REQUEST_FILENAME} -f [OR]
|
|
RewriteCond %{REQUEST_FILENAME} -d
|
|
RewriteRule ^ - [L]
|
|
|
|
# URL propre pour les articles : /post/<slug>
|
|
RewriteRule ^post/([a-z0-9][a-z0-9-]*)/?$ /index.php?action=view&slug=$1 [L,QSA]
|
|
|
|
# Filtre par catégorie : /categorie/<nom>
|
|
RewriteRule ^categorie/(.+?)/?$ /index.php?cat=$1 [L,QSA,B]
|
|
|
|
# Pagination par curseur : /page/<uuid>
|
|
RewriteRule ^page/([0-9a-f-]{36})/?$ /index.php?cursor=$1 [L,QSA]
|
|
|
|
# Édition / création
|
|
RewriteRule ^edit/([0-9a-f-]{36})/tags/(.+?)/?$ /index.php?action=edit_tags&uuid=$1&tag_type=$2 [L,QSA,B]
|
|
RewriteRule ^edit/([0-9a-f-]{36})/?$ /index.php?action=edit&uuid=$1 [L,QSA]
|
|
RewriteRule ^new/?$ /index.php?action=create [L,QSA]
|
|
RewriteRule ^delete/([0-9a-f-]{36})/?$ /index.php?action=delete&uuid=$1 [L,QSA]
|
|
|
|
# Sources et diff
|
|
RewriteRule ^sources/([0-9a-f-]{36})/?$ /index.php?action=sources&uuid=$1 [L,QSA]
|
|
RewriteRule ^diff/([0-9a-f-]{36})/(\d+)/?$ /index.php?action=diff&uuid=$1&rev=$2 [L,QSA]
|
|
|
|
# Fichiers / import
|
|
RewriteRule ^files/([0-9a-f-]{36})/add/?$ /index.php?action=add_files&uuid=$1 [L,QSA]
|
|
RewriteRule ^import/([0-9a-f-]{36})/?$ /index.php?action=import_image&uuid=$1 [L,QSA]
|
|
|
|
# Admin (regen-thumbs et role/<email> avant la règle générique admin/<tab>)
|
|
RewriteRule ^admin/regen-thumbs/?$ /index.php?action=regen_thumbs [L,QSA]
|
|
RewriteRule ^admin/role/([a-z0-9_-]+)/?$ /index.php?action=admin_role_edit&role_name=$1 [L,QSA]
|
|
RewriteRule ^admin/([a-z0-9-]+)/?$ /index.php?action=admin&tab=$1 [L,QSA]
|
|
RewriteRule ^admin/?$ /index.php?action=admin [L,QSA]
|
|
|
|
# Réactions et commentaires
|
|
RewriteRule ^react/?$ /index.php?action=react [L,QSA]
|
|
RewriteRule ^comment/?$ /index.php?action=comment [L,QSA]
|
|
RewriteRule ^comment-moderate/?$ /index.php?action=comment_moderate [L,QSA]
|
|
RewriteRule ^verify-comment/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/?$ /index.php?action=verify_comment&token=$1 [L,QSA]
|
|
|
|
# Pages de gestion
|
|
RewriteRule ^categories/?$ /index.php?action=categories [L,QSA]
|
|
RewriteRule ^profile/?$ /index.php?action=profile [L,QSA]
|
|
RewriteRule ^search/?$ /index.php?action=search [L,QSA]
|
|
RewriteRule ^flux/?$ /index.php?action=flux [L,QSA]
|
|
RewriteRule ^feed/add/?$ /index.php?action=add_feed [L,QSA]
|
|
RewriteRule ^feed/delete/?$ /index.php?action=delete_feed [L,QSA]
|
|
|
|
# Profil public auteur + page liens
|
|
RewriteRule ^profil/([a-z0-9][a-z0-9-]*)/article/cursor/([0-9a-f-]{36})/?$ /index.php?action=author_articles&slug=$1&cursor=$2 [L,QSA]
|
|
RewriteRule ^profil/([a-z0-9][a-z0-9-]*)/article/?$ /index.php?action=author_articles&slug=$1 [L,QSA]
|
|
RewriteRule ^profil/([a-z0-9][a-z0-9-]*)/?$ /index.php?action=author&slug=$1 [L,QSA]
|
|
RewriteRule ^liens/([a-z0-9][a-z0-9-]*)/?$ /index.php?action=liens&slug=$1 [L,QSA]
|
|
RewriteRule ^link/add/?$ /index.php?action=add_link [L,QSA]
|
|
RewriteRule ^link/delete/?$ /index.php?action=delete_link [L,QSA]
|
|
RewriteRule ^link/reorder/?$ /index.php?action=reorder_links [L,QSA]
|
|
|
|
# Pages statiques
|
|
RewriteRule ^about/?$ /index.php?action=about [L,QSA]
|
|
RewriteRule ^legal/?$ /index.php?action=legal [L,QSA]
|
|
RewriteRule ^licenses/?$ /index.php?action=licenses [L,QSA]
|
|
RewriteRule ^contact/?$ /index.php?action=contact [L,QSA]
|
|
|
|
# Flux RSS — /feed est canonique, /rss et /rss.xml redirigent en 301
|
|
RewriteRule ^rss/?$ /feed [R=301,L]
|
|
RewriteRule ^rss\.xml$ /feed [R=301,L]
|
|
RewriteRule ^feed/([0-9a-f-]{36})/?$ /feed.php?after=$1 [L,QSA]
|
|
RewriteRule ^feed/?$ /feed.php [L,QSA]
|
|
|
|
# Sitemap
|
|
RewriteRule ^sitemap\.xml$ /sitemap.php [L]
|
|
|
|
# Ajoute .php si le fichier correspondant existe
|
|
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.php -f
|
|
RewriteRule ^(.+?)/?$ /$1.php [L,QSA]
|
|
|
|
# 404 intelligent : redirige vers l'article le plus proche
|
|
ErrorDocument 404 /index.php?action=not_found
|