Maitrisez à fond le .htaccess

A quoi ca sert ?

Un fichier .htaccessVous disposez de PHP, d'un serveur Apache, vous aimeriez aller un peu plus loin avec votre site web ?
Découvrez les fichiers .htaccess. Il s'agit de petits fichiers de configuration qui vont vous permettre de personnaliser le comportement de "votre" serveur. Ils se révéleront très utiles si vous n'avez pas accès au fichier de configuration principal.

A quoi servent-ils plus précisément ? À une foultitude de choses ! Vous pouvez personnaliser les pages d'erreurs (fini l'horrible 404 !), changer la page d'accueil, protéger un répertoire, et surtout, pratiquer l'URL rewriting, ce qui vous permettra de masquer vos URL telles que

index.php?pseudo=neamar&age=15&nationalite=france...

Sans tarder, commençons !

La création

Si vous êtes sous Linux, pas de problèmes ! Il vous suffit de créer un fichier .htaccess dans le répertoire correspondant de votre FTP.
Si vous êtes sous Windows, c'est plus complexe : par défaut, Windows n'accepte pas les fichiers qui commencent par un point. Vous pouvez contourner le problème en entourant le nom par des guillemets au moment de l'enregistrement: "".

Enregistrer un .htaccess sous Windows

Deuxième solution : nommer le fichier htaccess, puis l'uploader sur le serveur, et le renommer en .htaccess.

Les .htaccess sont disposés en bubbling : c'est à dire que si vous mettez un fichier htaccess à l'index de votre site, tous les sous-dossiers seront affectés. Ainsi, de sous-dossiers en sous-dossiers, les fonctions vont s'ajouter.

Les fonctions

Changement d'index

En temps normal, lorsque l'on demande un dossier, Apache recherche un fichier index.htm, puis index.html, puis index.php....
Vous pouvez changer ce comportement en utilisant la directive DirectoryIndex :

DirectoryIndex Presentation.php

Pages d'erreur personnalisées

Par défaut, Apache sert une page d'erreur sobre lorsqu'il ne trouve pas le document. Vous pouvez changer l'URL de la page d'erreur : c'est le but de la fonction ErrorDocument :

ErrorDocument 404 Erreur-404.htm

Le premier paramètre est le numéro de l'erreur à récupérer1, le second paramètre est la page vers laquelle il faut renvoyer.

Attention ! Vous devez marquer l'URL de la page en notation relative. Si vous la marquez en notation absolue (e.g. http://neamar.fr/Erreur-404.htm), la redirection s'effectuera bien, mais les headers envoyés seront avec un code d'erreur 200. Long story short, cela signifie que les moteurs de recherche, tels Google, ne seront pas capable de dire si une page est valide ou pas.
Vous pourriez aussi expérimenter certains problèmes avec des outils pour webmasters, qui cherchent à savoir si vous êtes le vrai webmaster d'un domaine en vous demandant d'uploader une page spéciale. Le logiciel n'aurait alors aucun moyen de dire si la page existe bien ou pas !

Du PHP dans le CSS !

Vous avez adoré dynamiser vos page HTML avec PHP ?
A priori, vous ne pourrez pas faire de même dans un fichier CSS, JavaScript, ou autre. Mais cela pourrait tout de même être utile : par exemple, si on voulait que le visiteur puisse choisir sa couleur d'affichage dans une palette graphique complète.
Pas de problème ! Une nouvelle fois, le .htaccess va vous sauver la mise via l'instruction AddType :

Code source : AddType
  • Langage : apache
  • ΔT : 0.001s
  • Taille :72 caractères
AddType application/x-httpd-php .js
AddType application/x-httpd-php .css

Passer au PHP 5

Plusieurs hébergeurs proposent par défaut la version 4 de PHP. Mais mieux vaut passer à la version 5 : elle est plus stable, plus performante, plus sécurisée, et admet quelques nouvelles fonctions.
Selon votre hébergeur, vous pouvez passer à la version 5 de PHP ! Il vous suffit d'incorporer les lignes suivantes :

Code source : PHP5
  • Langage : apache
  • ΔT : 0.001s
  • Taille :52 caractères
AddType x-mapp-php5 .php
AddHandler x-mapp-php5 .php

Ces lignes dépendent des hébergeurs. Renseignez-vous plour plus d'informations !

L'URL rewriting

L'URL rewriting est sûrement la fonction la plus utile des fichiers .htaccess. C'est malheureusement aussi une des plus complexes à maitriser !
Voyons d'abord quelle en est l'utilité : vous allez pouvoir simplifier vos URL et les clarifier pour vos visiteurs et les moteurs de recherche.
Ainsi, l'URL suivante :

index.php?pseudo=neamar&age=15&nationalite=france

va devenir

Fiche-neamar-15ans-france

Les Expressions Régulières

Pour maitriser l'URL rewriting, des connaissances de base avec les RegExp sont nécessaires. Je ne peux malheureusement pas en faire un cours ici, ce serait bien trop long...Je vous mets donc juste un lien vers un tutorial très complet2. Voilà juste la base, qui vous permettra de comprendre les exemples fournis :

Par exemple : la RegExp [a-z]+ renverra :

Voilà qui devrait suffire pour élaborer vos première regexp !

Élaborer votre réécriture

Examinons notre exemple :

index.php?pseudo=neamar&age=15&nationalite=france

va devenir

Fiche-neamar-15ans-france

Cherchons une RegExp qui corresponde à l'URL réécrite quels que soient les paramètres fournis :

Fiche-.+-[1-9]+-[a-zA-Z]+

Vérifions la validité de notre choix : un âge est forcément constitué d'un ou plusieurs chiffres : donc [1-9]+
Une nationalité est constituée de lettre minuscules et majuscules (pour l'instant, on négligera les pays composés !)
Un pseudo peut être constitué d'à peu près n'importe quoi : on utilise donc le point.

Il va maintenant falloir placer les parenthèses capturantes : elles détermineront quelles parties doivent être renvoyées dans l'URL de destination. Nous, nous cherchons à récupérer trois paramètres :

Fiche-(.+)-([1-9]+)-([a-zA-Z]+)

Maintenant la ligne miracle :

RewriteRule ^>Fiche-(.+)-([1-9]+)-([a-zA-Z]+)$ /index.php?pseudo=$1&age=$2&nationalite=$3 [L]

Quelques explications s'imposent...
Notre RegExp est maintenant entourée de ^et $. Si vous ne comprenez pas pourquoi, relisez le tutorial...cela signifie que l'URL doit commencer par Fiche et finir par la nationalité.
Le contenu des parenthèses est réinjecté dans la deuxième partie de la ligne : ce sont les $1, $2 et $3 qui contiennent respectivement le contenu des parenthèses 1, 2 et 3.
Le [L] indique que le moteur d'URL rewriting doit arrêter sa recherche ici si l'URL correspond à l'expression régulière. Cela vous sera utile quand vous aurez plusieurs lignes d'URL Rewriting.

Si vous avez marqué ce code dans votre .htaccess, vous risquez d'avoir une mauvaise surprise...c'est par ce que cette simple ligne ne suffit pas. Je ne vous fais pas languir plus longtemps, voilà le total :

Code source : Rewriting
  • Langage : apache
  • ΔT : 0.002s
  • Taille :373 caractères
# Le serveur doit suivre les liens symboliques :
Options +FollowSymlinks

# Activation du module de réécriture d'URL :
RewriteEngine on

#--------------------------------------------------
# Règles de réécriture d'URL :
#--------------------------------------------------

RewriteRule ^Fiche-(.+)-([1-9]+)-([a-zA-Z]+)$ /index.php?pseudo=$1&age=$2&nationalite=$3 [L]

Je pense que je n'ai pas besoin d'en dire beucoup plus, les commentaires sont éloquents !
Profitez bien de ce module, il s'avère extrêmement utile !

Quelques problèmes courants

Si après avoir uploadé votre fichier .htaccess, vous obtenez une erreur 500 (Internal Server Error), pas de chance ! Votre serveur n'est pas compatible avec les .htaccess. Si vous êtes sur un hébergement mutualisé, il est fort probable que votre hébergeur ait interdit l'utilisation de ces fichiers. Vous allez devoir supprimer le fichier .htaccess, dommage...vous devrez faire sans !

Si vous obtenez une erreur 500 en utilisant l'URL rewriting, deux possibilités :


Références :

  1. La liste officielle des erreurs est disponible ici : http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
  2. Les expressions régulières sur le Site Du Zero : http://www.siteduzero.com/tuto-3-168-1-les-expressions-regulieres-partie-1-2.html
Auteur
Neamar
Date
Juill. 2008
But
Découvrir .htaccess
Menu
Index des ressources

Chargement du sommaire...