Ce qu'il faut savoir sur le .htaccess

E
ERICSTAMANT
Ce qu'il faut savoir sur le .htaccess

Dans ce bref billet de blog, je vais vous parler d’un fichier très important que l’on retrouve à la racine d’un site Internet. Il s’agit du htaccess (.htaccess). Ce fichier permet de réaliser certaines choses très importantes, entre-autre, la réécriture d’URL et les redirections.

Je vais donc tenter de vous expliquer différentes fonctions. Je vous suggère de placer cet article en favoris, il pourra vous servir de référence futur!

Redirection www avec htaccess

Saviez-vous que par défaut un site Internet possède plus d’une adresse? Sans une configuration adéquate, votre site web est accessible via www et sans www. Et cela n’est pas sans importance! Google considère le sous-domaine www comme étant distinct au domaine. Ce qui signifie un contenu dupliqué!

Heureusement, htaccess permet de régler ceci.

IMPORTANT : le fichier htaccess doit être nommé ( .htaccess ) et placé à la racine de votre site web. Dans la majorité des cas, dans le répertoire /public_html, au même endroit que votre fichier index.

Voici donc un code htaccess de redirection www :

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Avec ce code, votre site web sera uniquement accessible via le www. Si celui-ci n’est pas indiqué dans la barre d’adresse URL, une redirection 301 (permanente) sera effectuée.

Redirection du fichier index avec htaccess

Tout comme pour le www, un site Internet est accessible à la fois via la racine (example.org/) et via le fichier index (/index.php ou index.html). Encore une fois, cela pause problème, car il s’agît de deux adresses différentes qui affichent le même contenu. Pour remédier à ce problème, insérez ces lignes dans votre fichier htaccess, suite à la redirection du www.

RewriteCond %{THE_REQUEST} ^.*/index\.php 
RewriteRule ^(.*)index.php$ /$1 [R=301,L]

Redirection HTTPS avec htaccess

Par défaut, lorsque nous accédons à un site Internet, celui-ci utilise le protocole HTTP. Pour différentes raisons, nous pouvons être amenés à vouloir offrir à nos visiteurs une expérience de navigation sécurisée avec HTTPS.

Voici donc ce qu’il faut insérer dans notre fichier .htaccess :

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Ceci peut également être jumelé avec la formule pour forcer le www, comme ceci :

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Le tout en redirection permanente (301).

Redirection 301 (permanente) avec htaccess

Pour différente raison, nous sommes de temps à autre amené à effectuer des directions d’anciennes pages ou répertoires vers une nouvelle adresse, ou encore vers un nouveau domaine. Le htaccess permet de gérer simplement ces redirections.

Voici comment faire :

redirect 301 /ancienne-adresse https://www.example.org/nouvelle-adresse

Réécriture d’URL avec htaccess

La réécriture d’adresse est relativement complexe, mais non négligeable pour bon nombre de projet. Nous y retrouvons entre autre la création de fichier dynamique avec query string, la création de document dynamique (exemple : générer un flux rss en php), ou encore modifier le chemin d’un répertoire.

Je vous donne ici deux exemples :

RewriteRule ^rss.xml$ rss.php [NC,L]

Avec cette formule de réécriture, le fichier rss.xml qui n’existe pas, sera maintenant accessible et affichera le contenu de rss.php.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)?$ index.php?permalink=$1

Ici, nous avons une condition ainsi qu’une formule de réécriture. La condition indique d’appliquer la règle de réécriture lorsqu’un document, qui n’est pas un dossier, est demandé au serveur.

La formule quant à elle prend l’URL demandé et l’envoie comme paramètre “permalink” au fichier index.php. Ce fichier pourrait alors vérifier si le paramètre est égal à une colonne dans une base de données, pour ensuite afficher un contenu.

Restreindre l’accès à un répertoire avec htaccess

Une fonction intéressante du htaccess est la possibilité de restreindre l’accès à un répertoire à certaines adresses IP, ou de leurs bloquer l’accès.

<Directory "/admin/">
order deny,allow
deny from all

allow from xxx.xxx.xxx.xxx
</Directory>

Dans cet example, nous autorisons “xxx.xxx.xxx.xxx” à accéder au répertoire /admin/. Toutes autres adresse IP sera exclus.

Inversement, nous pouvons faire ceci, pour autoriser toutes les adresses IP, sauf ceux indiqués :

allow from all
deny from xxx.xxx.xxx.xxx
deny from xxx.xx

Fichier d’erreurs personnalisés avec htaccess

Il existe différentes façons de gérer les fichiers d’erreurs personnalisés (exemple la plus commune, les erreurs 404). Htaccess en fait partie.

Voici quoi indiquer dans votre fichier htaccess :

ErrorDocument 400 /400.html
ErrorDocument 401 /401.html
ErrorDocument 403 /403.html
ErrorDocument 404 /404.html
ErrorDocument 500 /500.html
ErrorDocument 502 /502.html
ErrorDocument 504 /504.html

Vous devrez ensuite créer les fichiers correspondant (400.html, .. 404.html …) et les placers dans le dossier racine de votre site web.

En espérant que ces informations vous soient utiles!