A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

2.7. Le fichier .htaccess

Nous avons mentionné le fichier APP_DIR/public/.htaccess en parlant de la structure typique des dossiers. Essayons maintenant de comprendre le rôle de ce fichier.

Le fichier .htaccess est en fait un fichier de configuration du serveur Apache permettant de surcharger la configuration globale de certains serveurs web. Le fichier .htaccess est une configuration au niveau du répertoire, ce qui signifie qu'il n'affecte que son propre dossier et tous ses sous-dossiers.

Le contenu du fichier .htaccess est présenté ci-dessous :

RewriteEngine On
# La règle suivante indique à Apache que si le nom de fichier 
# demandé existe, il suffit de le renvoyer.
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [L]

# Ce qui suit renvoit toutes les autres requêtes vers index.php. 
# Cette condition garantit que si vous utilisez des alias Apache 
# pour effectuer un hébergement virtuel de masse ou si vous avez 
# installé le projet dans un sous-répertoire, le chemin de base 
# sera ajouté au début pour permettre une résolution correcte du 
# fichier index.php; il fonctionnera également dans des 
# environnements sans alias, offrant ainsi une solution sur mesure 
# et sécurisée.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}/index.php [L]

La ligne 1 indique au serveur Apache d'activer le moteur de réécriture d'URL (mod_rewrite). Le moteur de réécriture modifie les demandes d'URL entrantes, en fonction des règles d'expression régulières. Cela vous permet de mapper des URL arbitraires sur votre structure d'URL interne comme vous le souhaitez.

Les lignes 4 à 7 définissent des règles de réécriture qui indiquent au serveur que si le client (navigateur web) demande un fichier qui existe dans le répertoire racine du document plutôt que de renvoyer le contenu de ce fichier en tant que réponse HTTP. Parce que nous avons notre répertoire public à l'intérieur de la racine de l'hôte virtuel, nous permettons aux utilisateurs du site de voir tous les fichiers dans le répertoire public, y compris index.php, les fichiers CSS, JavaScript et les images.

Les lignes 14 à 16 définissent les règles de réécriture qui indiquent à Apache ce qu'il faut faire si l'utilisateur du site demande un fichier qui n'existe pas à la racine du serveur. Dans ce cas, l'utilisateur doit être redirigé vers index.php.

Le tableau 2.1 contient plusieurs exemples de réécriture d'URL. Les première et deuxième URL pointent vers des fichiers existants, ainsi mod_rewrite renvoie les chemins de fichiers demandés. L'URL du troisième exemple pointe vers un fichier htpasswd inexistant (qui peut être le symptôme d'une attaque par un pirate informatique) et, en fonction de nos règles de réécriture, le moteur renvoie le fichier index.php.

Table 2.1. Exemples de réécriture d'URL
URL demandée URL réécrite
http://localhost/index.php Le fichier existe; retourne le fichier local APP_DIR/public/index.php
http://localhost/css/bootstrap.css Le fichier existe; retourne le fichier local APP_DIR/public/css/bootstrap.css
http://localhost/htpasswd Le fichier n'existe pas; renvoie APP_DIR/public/index.php à la place.

Top