Le but de cet article n'est pas de faire le tour des possibilités offertes mais de présenter les fonctions qui peuvent êtres intéressantes sur tous les sites.
Et je vais essayer de montrer comment implémenter simplement l'URL Rewriting sur un site. L'URL Rewriting permet d'avoir des liens avec un nom simple est standard pour chaque lien, ce qui permet un bon travail des robots des moteurs et donc vous permet d'avoir un bon référencement pour votre site.
La première chose que je fais systématiquement pour tous mes sites c'est de gérer les erreurs, quoi de plus énervant pour un visiteur que d'arriver sur une erreur 404...
Nous allons donc détailler la technique pour rediriger ces erreurs vers une page de notre choix.
- Code: Tout sélectionner
ErrorDocument 401 /erreur.php
ErrorDocument 403 /erreur.php
ErrorDocument 404 /erreur.php
ErrorDocument 500 /erreur.php
Dans cet exemple on redirige les erreurs vers une page spécifique (erreur.php) située à la racine du site.
Ensuite il ne reste qu'à traiter le code d'erreur pour afficher un message compréhensible au visiteur :
- Code: Tout sélectionner
$url_erreur = $_SERVER["REQUEST_URI"];
$serveur_erreur = $_SERVER["REDIRECT_STATUS"];
$message_erreur['401'] = "Authentification nécessaire";
$message_erreur['403'] = "Accès interdit";
$message_erreur['404'] = "La page spécifiée n'existe pas";
$message_erreur['500'] = "Erreur interne du serveur";
$libelle_erreur = "Erreur $message_erreur";
echo "$url_erreur : $libelle_erreur : $message_erreur[$serveur_erreur]";
Il ne vous reste plus qu'à intégrer ce code à une page PHP aux couleurs de votre site et le visiteur aura un message compréhensible.
Intéressons nous maintenant à la réécriture d'url.
Je fais le choix de n'avoir que des url comparables à des pages HTML statique, donc les fichiers ayant une extension PHP seront appelés avec une extension HTML, par exemple pour avoir la page index.php je taperais index.html dans l'url.
Pour les url avec des paramètres c'est un peu plus compliqué, voila le modèle que nous allons employé :
» mapage.php?var1=valeur1&var2=valeur2&...&varN=valeurN
deviendra :
» mapage-var1-valeur1-var2-valeur2-....-varN-valeurN.html
Le code à insérer dans le .htaccess utiles les expressions régulières, il faut commencé par activer le mode rewriting :
- Code: Tout sélectionner
RewriteEngine on
RewriteRule (.*)(-.+)-([^-]+)-([^-&]*)([^-]*)\.html $1$2&$3=$4$5\.html [N]
RewriteRule (.*)-([^-]+)-([^-]*)(.*)\.html $1.php?$2=$3$4 [L]
RewriteRule ^(.*).html $1.php [L]
A noter qu'il faut que le moteur de réécriture apache doit être au préalable activé sur le serveur.
Pour un hébergement mutualisé, si vous contez utiliser cette technique vérifiez bien son autorisation auprès de l'hébergeur.
On peut remarquer qu'avec cette méthode générale il n'est pas possible d'appeler une page ayant une extension .HTML, car la requête sera renvoyée sur la page portant l'extension .PHP correspondante.
Par contre les url classique avec extension .PHP et éventuellement avec des paramètres fonctionneront toujours.
Vous pouvez également interdire le téléchargement de vos images par d'autres sites pour protéger votre bande passante :
- Code: Tout sélectionner
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.votresite.com/.*$ [NC]
ReWriteRule .*\.(gif|png|jpe?g)$ - [F]
Ces explications vous présentes une application concrète du fichier .htaccess que j'utilise. Si vous voulez comprendre le fonctionnement complet de ces règles il est nécessaire de consulter la documentation.
Mais je pense que c'est une bonne démarche de commencer à partir d'un cas concret qui fonctionne.
Nous avons vu comment ça se passe du côté du serveur mais au niveau du code PHP il faut maintenant avoir les bonnes url, c'est à dire au format .HTML.
Pour cela il y a deux manière, la première c'est que vous mettiez les bonnes url directement dans votre code, soit utiliser une fonction PHP inverse de celle du .htacces.
Cet deuxième solution a l'avantage d'être extrêmement souple, si vous changez vos règles ou si le support de l'URL Rewriting est désactivé du serveur. Voici la fonction que j'utilise :
- Code: Tout sélectionner
function lienurlrewriting($url) {
if (eregi("(.*).php(.*)",$url,$regs)) {
$monurl = $regs[1];
$geturl = $regs[2];
while (eregi("(.*)(\?|&)([^=]+)=([^=]*)(.*)",$geturl,$regs)) {
$geturl = $regs[1]."-".$regs[3]."-".$regs[4].$regs[5];
}
$url = $monurl.$geturl;
} elseif(eregi("(.*).php",$url,$regs)) {
$url = $regs[1];
}
return $url.".html";
}
Cette fonction est écrite pour ne gérer que les url des fichiers .PHP en entrée, vous pouvez l'enrichir selon vos besoins.

