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
.
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. |