====== Sécuriser son site Web sous Apache ======
===== Définition du fichier .htaccess =====
Le fichier .htaccess est un fichier de configuration utilisé par le serveur Apache. Il permet de contrôler de nombreux aspects du comportement du serveur pour un répertoire spécifique, comme la réécriture d’URL, les redirections, la restriction d’accès ou encore la gestion des erreurs personnalisées.
**Documentation officielle Apache :** https://httpd.apache.org/docs/current/howto/htaccess.html
===== Visibilité du contenu d'un dossier =====
Par défaut, Apache peut afficher le contenu d’un dossier si aucun fichier index (comme index.html ou index.php) n’est présent.
**Pour éviter cela :**
Options -Indexes
Cela empêche les visiteurs de voir la liste des fichiers d’un dossier sans index.
===== Fichier par défaut =====
Apache sert généralement un fichier par défaut (comme index.html) lorsqu’un utilisateur accède à un répertoire.
**Pour spécifier un fichier personnalisé :**
DirectoryIndex accueil.html
Cela forcera Apache à servir accueil.html en priorité.
===== Blocage d'accès à un dossier =====
Pour empêcher l’accès à un dossier spécifique :
Order Allow,Deny
Deny from all
Ou de manière plus moderne (Apache 2.4+) :
Require all denied
===== Accès authentifié =====
Pour restreindre l’accès à un dossier avec un mot de passe :
AuthType Basic
AuthName "Zone protégée"
AuthUserFile /chemin/vers/.htpasswd
Require valid-user
💡 Le fichier .htpasswd contient les identifiants et mots de passe chiffrés. Tu peux le générer avec la commande htpasswd.
===== Pages d'erreurs personnalisées =====
Tu peux personnaliser les messages d’erreur (404, 403, etc.) :
ErrorDocument 404 /erreurs/404.html
ErrorDocument 403 /erreurs/403.html
Cela redirige les erreurs vers des pages spécifiques plus esthétiques et informatives.
===== Réécriture d'URL =====
Pour simplifier les URL ou créer des routes plus propres :
RewriteEngine On
RewriteRule ^page/([0-9]+)$ page.php?id=$1 [L]
⚠️ Le module mod_rewrite doit être activé sur le serveur Apache.
===== Forcer le https =====
Pour rediriger toutes les connexions HTTP vers HTTPS :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Cela garantit une connexion sécurisée entre l’utilisateur et le site.