testtestHome

Conserver ses permaliens en passant de Dotclear à WordPress…

20.05.2007 par Mich
Avec Dotclear 2 qui se fait attendre, nombreux sont ceux qui sont en train de migrer vers WordPress. Afin de conserver les URL, car ceux-ci sont peut-être référencés par d’autres sites, il est important de mettre en place des redirections permanentes par moyen du fichier .htaccess. Cet article n’est que valable si vous choisissez d’avoir une structure d’URL du type :

http://loremipsum.be/2007/05/20/dolor-sit-amet


J’ai aidé quelques personnes ces derniers temps avec la réécriture des URL afin que les permaliens restent valable en faisant une redirection permanente (code 301). Durant ceci, j’ai distingué 2 types d’url pour lesquels je vais vous donner le code à insérer dans votre .htaccess, avant le code #BEGIN WordPress.

Le premier est du type :

http://loremipsum.be/index.php/2007/05/20/123-dolor-sit-amet


La réécriture de cet URL est simple, il suffit d’insérer les prochaines lignes dans le fichier .htaccess :

RewriteEngine On
RewriteBase /
RewriteRule ^index.php[/]([0-9]+)[/]([0-9]+)[/]([0-9]+)[/][0-9]+-(.+)$ http://loremipsum.be/$1/$2/$3/$4 [R=301,L]


Le deuxième est du type :

http://loremipsum.be/index.php?2007/05/20/123-dolor-sita-amet


La différence avec le précédent est que celui-ci renvoie les données après index.php dans le query string, ce qui fait que j’ai du avoir une approche différente, étant en 2 étapes. La première étape construit un URL avec le querystring injecté dedans, la 2ème réécrit l’URL au format WordPress :

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} [0-9]+/[0-9]+/[0-9]+/[0-9]+-.+
RewriteRule ^index.php$ http://loremipsum.be/%{QUERY_STRING}/? [R=301,L]
RewriteRule ^([0-9]+)[/]([0-9]+)[/]([0-9]+)[/][0-9]+-(.+)$ http://loremipsum.be/$1/$2/$3/$4? [R=301,L]


Je suis bien conscient qu’il existe surement des méthodes bien meilleures, si tel est le cas, n’hésitez pas à le poster dans les commentaires.

Lien relatif: Conserver ses URL en passant de TypePad à Wordpress.
tags: . . |
Ce billet tombe à pique
Il est tellement génialissime WordPress ?
Tiens, que penses-tu de Typo ? (fait en Ruby on Rails)
En fait WordPress est bien car il a derrière sa grande extensabilité une énorme communauté

Typo, jamais testé, mais le fait que ce soit en RoR explique peut-être pourquoi, car je n'ai pas immédiatement de serveur en ligne pour faire un test avec
Pour finir, ca ne fonctionne pas chez moi.

Mais mes liens étaient de se type la

www.ellusion.be/blog/index.php/2007/04/09/101-prison-biesse-episode-1-et-2

Et mainteant ils sont comme ça

http://www.ellusion.be/blog/2007/04/09/prison-biesse-episode-1-et-2/

C'est grave docteur?
C'est parce que tu es dans un folder "blog" sur ton site et pas sur le root...

Essaye un peu ceci:

RewriteEngine On
RewriteBase /blog
RewriteRule ^index.php[/]([0-9]+)[/]([0-9]+)[/]([0-9]+)[/][0-9]+-(.+)$ http://www.ellusion.be/blog/$1/$2/$3/$4/ [R=301,L]

Merci. j'avais essayé plein de variantes différentes mais dans les adresses.

je vais essayer merci.
Au pire je reviens vers toi ce soir, t'a surement un IM comme GTalk ou quoi, non?
Nickel, ça fonctionne merci Mich
Salut,

Je place de grands espoirs dans ce billet. J’ai essayé (et tordu) la règle de QUERY_STRING, sans succès, mais il est vrai que mon cas est un peu différent.

Je pense que le mieux pour que je comprenne est de passer par un exemple pour lequel on me donne la réponse.

Voici ce que j'ai en entrée :

http://blog.empyree.org/?2562-pension-de-garces

et ce que je veux en sortie :

http://blog.empyree.org/post/2560

Comme tu peux le voir, le numéro d’identifiant n'est pas le même. C'est une contrainte connue et (plus-ou-moins) acceptée : je devrais faire des milliers de redirections (enfin, au moins à chaque fois que je découvrirais un lien mort). Ça veut dire qu’une redirection générique ne marchera pas. Comme je l’ai dit, cette contrainte est acceptée.

L’autre point, c’est que j’ai du QUERY STRING en entrée, mais que je veux du PATH INFO en sortie.

Vois-tu comment obtenir tout ceci ?

Merci grandement, vraiment.
David,

A ce moment, je propose que tu prends une structure de permaliens pour ton nouveau blog qui est facilement transposable depuis l'ancien. Oublie dans ton cas l'ID et base toi sur le post name.

Tu peux dans les options de WP mettre un différent type de lien, je propose http://adressedublog/postname/ vu que tu n'a pas de date dans tes liens...
Bonjour.

Je suis entrain de migrer de Dotclear à Wordpress, et donc votre technique m'interesse beaucoup, pour ne pas perdre mon référencement dans Google notament.

Mais je ne comprend pas vraiment ce qu'il faut faire...

Mon blog n'est pas à la racine du serveur, mais pour le moment dans un dossier /blog_ ( le temps de tout régler ). Le blog actuel, qui disparaitra quand la migration sera effectuée et complète, est lui pour le moment dans le dossier /blog.

Où dois-je mettre le .htaccess ? Que doit-il contenir en plus de

RewriteEngine On
RewriteBase /
RewriteRule ^index.php[/]([0-9]+)[/]([0-9]+)[/]([0-9]+)[/][0-9]+-(.+)$ http://loremipsum.be/$1/$2/$3/$4 [R=301,L]

?


Merci beaucoup d'avance.

Hello, étant en plein migration Dotcelar vers WP, je me retrouve aussi devant le problème du rewrite, mais avec l'exception de combiner les 2 types d'url dotclear, c-à-d :
/index,php/?xx-yyyyyy

en clair j'ai des liens de ce type :
http://www.swissbuzz.com/index.php/?2006/07/17/24-sonyericsson-k800i

je te rassure, mon blog ne se trouve pas dans un répertoire index.php ...

j'essaie de rajouter slash ou [/] mais sans succès, si tu as une idée ??!

Je t'en remercie d'avance pour ton aide éventuelle, thx!


Bonjour,

j'ai essayé d'utiliser le code htaccess comme indiqué ci-dessus (à savoir le
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} [0-9]+/[0-9]+/[0-9]+/[0-9]+-.+
RewriteRule ^index.php$ http://loremipsum.be/%{QUERY_STRING}/? [R=301,L]
RewriteRule ^([0-9]+)[/]([0-9]+)[/]([0-9]+)[/][0-9]+-(.+)$ http://loremipsum.be/$1/$2/$3/$4? [R=301,L] )

Seulement, comme j'ai voulu faire mon intéressant, j'ai mis mon blog Wordpress dans un sous-domaine, et le schéma des urls est http://sous-dom.example.org/annee/mois/titre-post/
De fait, à chaque fois la redirection aboutit, mais aucun post ne correspond...

Comment changer le .htaccess en conséquence ?

Merci d'avance cher ami d'outre-quiévrain
Je veux juste vous signaler que pour moi ça ne fonctionnais pas avec une adresse de type http://loremipsum.be/index.php?2007/05/20/123-dolor-sita-amet jusqu'à ce que je modifie la ligne

^index.php$ http://loremipsum.be/%{QUERY_STRING}/? [R=301,L]

en y ajoutant un \ entre index et .php$ pour obtenir

^index\.php$ http://loremipsum.be/%{QUERY_STRING}/? [R=301,L]

comme je l'avais vu ici http://www.expressions.be/2007/05/19/divorce-avec-dotclear-ma-maitresse-sappelle-wordpress/

Depuis ça marche d'enfer. Merci à vous tous qui partagez vos solutions à nos problèmes!
Je viens juste de passer de Dotclear à WordPress et voudrais aussi employer cette technique pour mes urls. Mais je n'ai pas de fichier .htaccess et ne sais pas du tout comment en créer un, ni ce qu'il doit y avoir dedans ! Merci d'avance de votre aide.
Bonjour
Je vais également de passer de DotClear à Wordpress.
Mes URL dans DotClear se présentaient comme cela: www.tousleslabos.com/BLOG/index.php?2007/04/21/photoweb-promotion

Dans Wordpress j'ai : www.tousleslabos.com/V2/2007/04/21/photoweb-promotion

Pourriez-vous m'aider à créer le code pour le htaccess car je mouline , merci !
Oh, amusant, je tombe ici en suivant doucement ma procédure de passage de DC1.2.7.1 à WP2.5.
J'avais beaucoup d'espoir en lisant tes recommandations, et étant très prudent, j'ai installé WP en local, réalisé la transition des articles, etc...

Je suis donc dans http://localhost/wp25/ et tout fonctionne, mais quand je veux imposer ta méthode pour obtenir un billet du genre http://localhost/wp25/index?2008/04/10/1-bonjour-tout-le-monde/ (mon ancienne structure sous DC), j'arrive à une erreur 500.

RewriteEngine On
RewriteBase /wp25/
RewriteCond %{QUERY_STRING} [0-9]+/[0-9]+/[0-9]+/[0-9]+-.+
RewriteRule ^index.php$ http://localhost/%{QUERY_STRING}/? [R=301,L]
RewriteRule ^([0-9]+)[/]([0-9]+)[/]([0-9]+)[/][0-9]+-(.+)$ http://localhost/$1/$2/$3/$4? [R=301,L]
# BEGIN WordPress
# END WordPress

J'ai testé aussi dans la changement des permaliens de WP de demander :
/index?%year%/%monthnum%/%day%/%post_id%-%postname%/ (cad la même structure que DC)
et il m'écrit alors dans le .htaccess :

# BEGIN WordPress

RewriteEngine On
RewriteBase /wp25/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp25/index.php [L]


# END WordPress

mais si le blog fonctionne à la racine et donne des URL correctes pour les billets, j'arrive à une 404 si je clique...

Bref, je patauge, si quelqu'un a trouvé la solution...
Salut,

Ton code fonctionne très bien, mais j'ai un tout petit problème.

Lorsque le titre du billet sous dotclear contenant un tiret entre 2 espaces, alors on se retrouve sous dotclear avec un URL avec 3 tirets à la suite.

Ton code fonctionne bien, car sous wordpress, il redirige bien vers le bon billet, mais toujours avec une url avec 3 tirets alors que l'url native calculée par wordpress ne comporte elle qu'un seull tiret.

Exemple de titre : Aia n'est toujours pas rentré - Inondation dans la ger (Khar Us Nuur)
URL dotclear : http://www.test.com/index.php?2005/06/29/173-aia-nest-toujours-pas-rentre---inondation-dans-la-ger-khar-us-nuur
URL réécrite dans wp : http://www.test.com/index.php?2005/06/29/173-aia-nest-toujours-pas-rentre---inondation-dans-la-ger-khar-us-nuur
URL WP native : http://www.test.com/2005/06/29/aia-nest-toujours-pas-rentre-inondation-dans-la-ger-khar-us-nuur/

du coup, le probleme, c'est le duplicate content.

Deux URL pour une même page.

Quelqu'un aurait une solution dans le rewriting pour virer les multiples tirets ?
Laisser un commentaire
  • Nom *

  • Email *

  • Homepage

  • Commentaire *

  • * = champs requis


  • Je suis amnésique