Voilà un petit truc que je souhaite partager avec d’autres blogueurs dans mon cas, car cette problématique est très mal documentée (en gros, n’étant pas développeur, j’ai GALÉRÉ ).
Bon en gros le problème était que mes anciennes URL Dotclear tombaient dans le vide depuis mon passage à Wordpress.
Le format des anciennes url était du type :
http://www.webinterdit.com/content/index.php/2006/01/07/24-le-mystere-du-fichier-gi
et la nouvelle, dans wordpress :
http://www.webinterdit.com/2006/01/07/le-mystere-du-fichier-gi
On note donc que pour obtenir la nouvelle adresse il faut :
- supprimer /content/index.php
- supprimer le numéro du post et le tiret qui le suit (‘24-’ dans notre exemple)
Pour ce faire, le mieux est d’utiliser PHP (ça doit pouvoir se faire aussi en mod_rewrite, mais bon, je l’ai fait en PHP).
Voici le code en question :
// Est-ce que le visiteur demande une ancienne adresse ?
if(preg_match("/\/content\/index\.php/",$_SERVER['REQUEST_URI'])==1)
{
//Recupere l'url et la stocke dans $uri
$uri = $_SERVER['REQUEST_URI'];
// Suppression de /content/index.php
$uri = preg_replace("/\/content\/index\.php/","",$uri);
// Suppression du n° de billet
$uri = preg_replace("/[0-9]+[\-]/","",$uri);
// Redirection 301
header("HTTP/1.1 301 Moved Permanently");
// Destination de la redirection (notre adresse nettoyée, soit $uri)
header("Location: ".$uri."");
// On oblige PHP à arrêter tout traitement
exit();
}
En premier lieu, ce code doit être placé dans l’index.php de votre installation Wordpress, juste après la balise d’ouverture php (attention, un seul espace et ça ne marche pas).
Maintenant essayons de voir ce que fait le code.
La première ligne vérifie si la chaîne ‘/content/index.php’ est présente dans l’url demandée par le visiteur. Les antislashes permettent « d’échapper » certains caractères spéciaux, afin que PHP les considère comme des caractères normaux. Par exemple, pour utiliser le ? (qui normalement interprété comme une commande), il faut écrire \?, ce qui forcera PHP a bien considérer le ? comme un caractère en tant que tel.
La variable $_SERVER['REQUEST_URI'] renvoie tout simplement l’URL demandée par le visiteur.
Les lignes suivantes, sur le même principe, modifient la variable $uri pour la rendre conforme à notre format Wordpress. On commence par supprimer la chaîne « /content/index.php », puis on cherche le n° de billet.
Petite explication sur cette manip : $uri = preg_replace(« /[0-9]+[\-]/ », »",$uri);
En fait, on utilise les regex pour isoler le numéro de billet. Les expressions regex sont encadrées par /expression/. La commande [0-9] signifie « n’importe quelle chaîne de caractères », + signifie « suivi de », [\-] signifie « un tiret » (échappé, car le tiret représente une fonction regex).
Une fois la variable $uri correctement modifiée (‘/2006/01/07/le-mystere-du-fichier-gi’ est la valeur retournée par $uri dans notre exemple), on demande à PHP de rediriger (sous forme de redirection 301, ce qui est le mieux pour le référencement) le visiteur à la nouvelle adresse.
Vous pouvez tester la manip sur cette url :
http://www.webinterdit.com/content/index.php/2006/01/07/24-le-mystere-du-fichier-gi
Si les url que vous devez transformer ont un format différent, il suffit de modifier la chaîne recherchée et la chaîne remplacée, en n’oubliant pas d’échapper les caractères spéciaux.
J’espère que ce post évitera à certains quelques maux de tête ou de perdre l’intégralité de leur référencement naturel.
Évidemment, cette manipulation de se limite pas à Wordpress et vous avez ainsi quelques bases pour modifier vos url sans utiliser mod_rewite.
Ces billets pourraient aussi vous intéresser :
- Installer Explorer 7 sans passer par la vérification WGA du système
- 6 bonnes raisons de ne pas passer à Vista
- Plugin Messenger OSD : vos messages sans ouvrir de fenêtre…
- 10 trucs pour réparer le PC des copains sans y laisser sa chemise
- Perdre son job en 140 caractères (ou moins)