Fiche .htaccess : configuration avancée Apache

Catégorie : serveur web
Étiquettes : apache, htaccess, rewrite, sécurité


1. Introduction

Dans ton parcours en BTS CIEL ou SIO, tu vas très souvent manipuler des serveurs web, notamment Apache HTTP Server. La configuration avancée d’Apache constitue une compétence essentielle, surtout lorsque tu travailles sur des hébergements mutualisés ou des environnements sans accès root.

Le fichier .htaccess te permet d’agir directement sur le comportement du serveur web, sans modifier la configuration globale. Tu peux gérer des redirections, renforcer la sécurité, contrôler l’accès aux ressources ou encore optimiser les performances.

L’objectif de cette fiche consiste à te rendre autonome sur les usages avancés de .htaccess, avec une approche concrète et orientée terrain.


2. Sommaire

  1. Introduction
  2. Principe et fonctionnement
  3. Synthèse Markdown
  4. Fichiers importants
  5. Configuration complète
  6. Explications détaillées
  7. Exemples concrets
  8. Commandes et dépannage
  9. Logs et analyse
  10. Bonnes pratiques
  11. Pour aller plus loin
  12. Liens utiles
  13. TP d’entraînement

3. Synthèse Markdown pour ta fiche bristol

# .htaccess Apache - fiche rapide

## Emplacement
/var/www/html/.htaccess

## Activer dans Apache
a2enmod rewrite
AllowOverride All

## Redirection HTTP → HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

## Bloquer une IP
Require not ip 192.168.1.100

## Protection fichier sensible
<Files "config.php">
Require all denied
</Files>

## Réécriture URL (SEO)
RewriteRule ^article/(.*)$ article.php?id=$1 [L]

## Désactiver listing répertoire
Options -Indexes

## Authentification basique
AuthType Basic
AuthName "Zone protégée"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

4. Fichiers importants

Voici les fichiers clés à connaître :

/etc/apache2/apache2.conf
/etc/apache2/sites-available/000-default.conf
/var/www/html/.htaccess
/etc/apache2/.htpasswd
/var/log/apache2/access.log
/var/log/apache2/error.log

5. Bloc de configuration complet

# Activation du moteur de réécriture
RewriteEngine On

# Redirection HTTP vers HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# Désactivation du listing
Options -Indexes

# Protection des fichiers sensibles
<FilesMatch "(config|\.env|\.htaccess)">
Require all denied
</FilesMatch>

# Bloquer certaines IP
Require all granted
Require not ip 192.168.1.100

# Réécriture URL propre
RewriteRule ^article/([0-9]+)$ article.php?id=$1 [L,QSA]

# Authentification
AuthType Basic
AuthName "Accès restreint"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

6. Explications détaillées

Activation de .htaccess

Tu dois autoriser son utilisation dans Apache :

sudo nano /etc/apache2/apache2.conf

Cherche :

<Directory /var/www/>
AllowOverride None
</Directory>

Remplace par :

AllowOverride All

Recharge ensuite :

sudo systemctl reload apache2

Moteur Rewrite

RewriteEngine On

Active le module de réécriture d’URL.


Redirection HTTPS

RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  • RewriteCond : condition
  • %{HTTPS} off : si HTTP
  • R=301 : redirection permanente
  • L : dernière règle

Sécurité fichiers

<FilesMatch "(config|\.env)">
Require all denied
</FilesMatch>

Empêche l’accès aux fichiers sensibles.


Gestion des accès

Require not ip 192.168.1.100

Bloque une IP spécifique.


Réécriture URL

RewriteRule ^article/([0-9]+)$ article.php?id=$1
  • ([0-9]+) : capture numérique
  • $1 : variable récupérée

7. Exemples concrets

Cas 1 : sécuriser un WordPress

  • Bloquer wp-config.php
  • Forcer HTTPS
  • Désactiver listing

Cas 2 : site pédagogique

  • URL propre : /cours/linux
  • Protection par mot de passe

Cas 3 : API interne

  • Restreindre par IP
  • Journaliser accès

8. Commandes et dépannage

Activer modules Apache

sudo a2enmod rewrite

Active le module rewrite.


Tester configuration

sudo apache2ctl configtest

Vérifie les erreurs.


Recharger Apache

sudo systemctl reload apache2

Vérifier port

Apache écoute sur :

TCP 80 (HTTP)
TCP 443 (HTTPS)

Pare-feu UFW

Cas 1 : serveur web public

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Cas 2 : serveur interne uniquement

sudo ufw allow from 192.168.1.0/24 to any port 80

9. Logs et analyse

Activer logs

Dans :

/etc/apache2/apache2.conf

Logs principaux

/var/log/apache2/access.log
/var/log/apache2/error.log

Lecture des logs

tail -f /var/log/apache2/error.log

Ce que tu vois dedans

  • erreurs de syntaxe .htaccess
  • accès refusés (403)
  • redirections
  • IP client

Faire parler les logs

grep "403" access.log

Analyse les refus.

grep "Rewrite" error.log

Debug rewrite.


10. Bonnes pratiques

  • Limite l’usage de .htaccess (performance)
  • Préfère config Apache globale si possible
  • Protège les fichiers sensibles
  • Teste chaque règle
  • Documente tes règles

11. Pour aller plus loin

Travaille avec :

  • VirtualHost Apache
  • ModSecurity (WAF)
  • Reverse proxy

12. Liens vers ressources


13. TP pour s’exercer

TP1 : redirection HTTPS

Objectif :

  • forcer HTTPS
  • vérifier avec navigateur

TP2 : protection dossier

  • créer /admin
  • ajouter authentification

TP3 : URL rewriting

  • transformer index.php?page=1
  • en /page/1

TP4 : blocage IP

  • bloquer ton IP
  • vérifier accès refusé

Cette fiche te donne une base solide pour maîtriser .htaccess en environnement réel.

Retour en haut