# ============================================================================= # .htaccess — Configuration Apache pour courcellematthi.eu # ----------------------------------------------------------------------------- # Équivalent de nginx.conf.example, pour un hébergement mutualisé où l'accès # à la configuration serveur n'est pas possible. # # Ne PAS utiliser ce fichier ET la configuration Nginx : ils font double emploi. # Sur Nginx, ce fichier est simplement ignoré. # ============================================================================= # ----------------------------------------------------------------------------- # REDIRECTIONS CANONIQUES # ----------------------------------------------------------------------------- RewriteEngine On # HTTP -> HTTPS RewriteCond %{HTTPS} !=on RewriteRule ^ https://www.courcellematthi.eu%{REQUEST_URI} [R=301,L] # Domaine nu -> www (doit correspondre au rel="canonical" du HTML) RewriteCond %{HTTP_HOST} ^courcellematthi\.eu$ [NC] RewriteRule ^ https://www.courcellematthi.eu%{REQUEST_URI} [R=301,L] # ----------------------------------------------------------------------------- # EN-TÊTES DE SÉCURITÉ # Voir nginx.conf.example pour le détail de chaque directive. # ----------------------------------------------------------------------------- # N'activer HSTS qu'une fois le HTTPS vérifié : irréversible côté serveur. Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set Content-Security-Policy "default-src 'self'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; script-src 'self' 'unsafe-inline'; img-src 'self' data:; connect-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; object-src 'none'; upgrade-insecure-requests" Header always set X-Content-Type-Options "nosniff" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=(), usb=(), interest-cohort=()" Header always set X-Frame-Options "DENY" # Retire la signature du serveur des en-têtes de réponse Header unset X-Powered-By # ----------------------------------------------------------------------------- # COMPRESSION # ----------------------------------------------------------------------------- AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css AddOutputFilterByType DEFLATE application/javascript application/json AddOutputFilterByType DEFLATE application/manifest+json image/svg+xml AddOutputFilterByType BROTLI_COMPRESS text/html text/css application/javascript image/svg+xml # ----------------------------------------------------------------------------- # CACHE # ----------------------------------------------------------------------------- ExpiresActive On # HTML : revalidation systématique, sinon les visiteurs restent sur une # version périmée après chaque publication. ExpiresByType text/html "access plus 0 seconds" ExpiresByType text/css "access plus 30 days" ExpiresByType application/javascript "access plus 30 days" ExpiresByType image/png "access plus 90 days" ExpiresByType image/svg+xml "access plus 90 days" ExpiresByType image/x-icon "access plus 90 days" ExpiresByType font/woff2 "access plus 1 year" ExpiresByType application/manifest+json "access plus 1 day" # ----------------------------------------------------------------------------- # TYPES MIME # ----------------------------------------------------------------------------- AddType application/manifest+json .webmanifest AddType image/svg+xml .svg AddType font/woff2 .woff2 # Encodage explicite : évite les accents cassés dans llms.txt et humans.txt AddDefaultCharset UTF-8 AddCharset UTF-8 .html .css .js .txt .xml .json .webmanifest # ----------------------------------------------------------------------------- # PROTECTION DES FICHIERS # ----------------------------------------------------------------------------- # Interdit l'accès direct à ce fichier et aux fichiers de configuration Require all denied # Désactive le listage des répertoires sans index Options -Indexes # Page d'erreur ErrorDocument 404 /index.html