Tp 7 php framework mvc blogpoo
Thème :
Junior
1 vues ·11/12 leçons

10 — Configuration serveur : .htaccess (Apache)

Définition

Le fichier .htaccess est un fichier de configuration Apache qui permet de définir des règles de réécriture d’URL au niveau d’un répertoire. Dans notre architecture, il sert à rediriger toutes les requêtes vers public/index.php.

🔗 Comparaison Laravel

Laravel est livré avec un fichier public/.htaccess quasi identique au nôtre.

Notre public/.htaccess :

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{DOCUMENT_ROOT}/../%{REQUEST_URI} -f
    RewriteRule ^(.*)$ /../$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

.htaccess de Laravel :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Notre version ajoute la gestion des fichiers statiques hors de public/.

Prérequis Apache

Le module mod_rewrite doit être activé :

sudo a2enmod rewrite
sudo systemctl restart apache2

Et dans la configuration du VirtualHost Apache :

<Directory /var/www/html/php-blog-2026/public>
    AllowOverride All  # Permet la lecture du .htaccess
</Directory>

Analyse règle par règle

RewriteEngine On

Active le moteur de réécriture d’URL pour ce répertoire.

Règle 1 : Servir les fichiers statiques hors de public/

RewriteCond %{DOCUMENT_ROOT}/../%{REQUEST_URI} -f
RewriteRule ^(.*)$ /../$1 [L]

RewriteCond : condition à respecter avant d’appliquer la règle.

  • %{DOCUMENT_ROOT} : le chemin absolu du dossier public/ sur le disque.
  • /../ : on remonte d’un niveau vers la racine du projet.
  • %{REQUEST_URI} : l’URL demandée, ex: /resources/css/blog.css.
  • -f : vérifie que le chemin assemblé est un fichier existant.

RewriteRule : si la condition est vraie, réécris l’URL.

  • ^(.*)$ : capture toute l’URL.
  • /../$1 : redirige vers le fichier un niveau au-dessus de public/.
  • [L] : “Last” — arrête le traitement des règles si celle-ci correspond.

Règle 2 : Tout rediriger vers index.php

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Condition 1 : !-d — Le chemin demandé n’est PAS un répertoire existant dans public/. Condition 2 : !-f — Le chemin demandé n’est PAS un fichier existant dans public/.

Si les deux conditions sont vraies (ni dossier, ni fichier), on redirige vers index.php qui lancera le routeur.

Flux complet d’une requête avec Apache

Navigateur → GET /login.php
     ↓
Apache + .htaccess
     ↓
public/login.php existe ? NON
public/ est un dossier ?  NON
     ↓
Réécriture → public/index.php
     ↓
PHP - session_start()
     ↓
Router::resolve('/login.php')
     ↓
AuthController::login()
     ↓
HTML affiché

Comparaison : Apache vs Serveur intégré PHP

Serveur intégré PHP Apache
Fichier de config server.php .htaccess
Commande php -S localhost:8000 server.php Configuration VirtualHost
Usage Développement uniquement Développement et Production
Performance Faible Haute

Configuration Nginx (alternative à Apache)

Si vous utilisez Nginx au lieu d’Apache, voici la configuration équivalente :

server {
    listen 80;
    root /var/www/html/php-blog-2026/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Servir les fichiers statiques hors de public
    location ~* \.(css|js|jpg|png|gif|webp)$ {
        root /var/www/html/php-blog-2026;
        try_files $uri =404;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

C’est exactement la configuration que Forge (l’outil de déploiement de Laravel) génère automatiquement pour les projets Laravel sur Nginx.

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur 10 — Configuration serveur : `.htaccess` (Apache). Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.