Migrer Dotclear 1.2 (DC1) vers Dotclear 2 (DC2) : Guide détaillé et focus sur la réécriture d'URL

La migration d'un logiciel de gestion de contenus ou de blogs d'une version majeure à une autre version majeure est souvent un périple, car il n'y a que rarement compatibilité totale des fonctions. Ayant entrepris la migration de blog vers Dotclear 2, j'ai découvert qu'ici aussi, un certain nombre de problèmes sont à régler avec en tête la réécriture d'URLS. En effet les URL réécrites n'ont pas du tout la même forme sous DC1 et DC2, ce qui oblige à un peu de gymnastique dans la construction des règles de réécriture...

dotclear.png

Avant migration de DC1 vers DC2

Le blog en production disposait et utilisait :

  • L'url rewriting (hack sur dotclear 1.2)
  • Un plugin pour streamer en flash des fichiers audio
  • Un outil externe de calcul de sitemap Google
  • Un plugin de gestion de captcha sur les commentaires postés
  • D'un flux de Bookmarks (Xbel)
  • D'un flux RSS 1.0

Bénéfices du passage en Dotclear 2

Ayant déjà installé des Dotclear2 pour plusieurs amis, j'ai pu constater les nombreux bénéfices de cette nouvelle version :

  • Administration plus conviviale
  • Multilingue et multiblog
  • Gestion de pages statiques (ex: mentions légales) facilitée
  • Installation de plugins par l'interface de gestion : facile
  • Mise à jour de Dotclear intégrée à l'interface d'admin : un simple clic
  • Outil de gestion des commentaires avec antispam et suppression automatique des commentaires non validés au dela d'une certaine période, paramétrable.
  • Dispose en standard d'un outil permettrant de streamer de l'audio ou de la vidéo, sans aucun plugin externe
  • Intégration de la gestion des sitemaps et des codes analytics dans Dotclear à l'aide d'un plugin
  • Gestionnaire de medias plus convivial et gérant tous les formats d'images et leur redimensionnement automatique, les archives Zip, les documents de bureautique, etc..
  • Gestionnaire de templates permettant l'édition de template directement dans Dotclear
  • Ajax à tous les étages, facilitant l'utilisation par les internautes, et l'administration
  • Gestion des flux RSS 2.0 et Atom 1.0

Méthodologie de migration Dotclear

En partie issue de la doc Dotclear et d'expériences personnelles, voici la méthodologie avec laquelle j'ai installé et migré le blog :

# Activation du moteur de réécriture (mettre PATH_INFO sur la méthode 
# de lecture d'url dans la config, activer "Je souhaite que mon blog soit 
# indexé et archivé par les moteurs de recherches', et créer 
# un fichier .htaccess à la racine du site contenant :
RewriteEngine on
# Si le fichier demandé n'existe pas physiquement
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# On envoie la demande à l'index de Dotclear
RewriteRule (.*) /index.php/$1[L]

A ce stade, le blog fonctionne partiellement :

  • Les billets s'affichent ainsi que les commentaires
  • Les catégories, archives, liens fonctionnent
  • Les images ne s'affichent pas dans les billets
  • Dans les billets contenant de l'audio, celui-ci ne marche pas
  • Le sitemap fonctionne ( monsite.com/sitemap.xml )
  • Les anciennes url ne fonctionnement pas, et une nouvelle syntaxe a fait place à l'ancienne

Résolution des problèmes de migration

Voyons comment régler ces problèmes uns pas uns.

Images : Le répertoire contenant les images a changé de place entre Dotclear 1 et Dotclear 2. De plus, les images n'ont pas été migrées automatiquement. La méthode propre consisterait à modifier tous les billets pour changer l'adresse des images. Ici je vais faire plus simple. Dotclear2 permet en effet de préciser dans la configuration avancée (About:config) l'emplacement des images. Il faut doc copier le répertoire 'images' de l'ancien blog sur le nouveau, et changer "public_path" en "images" et "public_url en "/images" dans about:config pour que les images soient prélevées du bon répertoire. Tester ensuite la config en visualisant un billet contenant des images.

Audio : Mes fichiers audio étaient rangés dans le répertoire de data du plugin audio. Celui-ci n'existant plus, la fonction étant buildin de Dotclear2, cela ne risquait pas de marcher. De plus les fichiers n'avaient pas été copiés lors de la migration. Je les ai donc déplacés dans le dossier /images, en créant un sous dossier audio. Ainsi, ces fichiers sont manipulables par le gestionnaire de médias. Par contre, cela nécessite de réintervenir sur tous les billets qui contiennent de l'audio, supprimer le code d'appel du player, et insérer le média avec l'éditeur pour que l'audio refonctionne.... Comme il n'y en avait qu'une quinzaine, ce n'était pas trop dérangeant de le faire à la main. Par contre, certaines pages sur internet, liaient directement les fichiers MP3 sur leur ancienne adresse. J'ai donc mis en place une règle de réécriture d'URL pour rediriger l'ancienne adresse vers la nouvelle. Voir ci dessous...

Url Rewriting : La syntaxe des utl simplifiées a changée. En effet, désormais les urls sont préfixées du type de contenu (tag, page, post, category, etc..). De plus certaines urls n'existent plus (comme les archives annuelles. J'ai donc mis en place un nouvelle construction d'url rewriting dans le .htaccess qui j'expliquerai après :

# Activation du moteur de réécriture
RewriteEngine on
#
# jeu de règles permettant la redirection DC1 vers DC2
# règle spéciale pour les fichiers audio afin 
# d'en assurer la permanence des URL's.
RewriteRule ^share/dotsound/([A-Za-z0-9_-]*).mp3 /images/audio/$1.mp3  [R=301,L]
# Pages statiques
RewriteRule ^p(0-9+) /page/$1 [R=301,L]
# Archive des articles (commence par la date, mais avec le mois et pas le jour...)
RewriteRule ^20([0-9]+)/([0-9]+)$ /archive/20$1/$2 [R=301,L]
# article (commence par la date)
RewriteRule ^20([0-9]+)/([0-9]+)/([0-9]+)/(.*) /post/20$1/$2/$3/$4 [R=301,L]
# Idem, mais ce sont la liste des billets du jour, redirigés sur l'archive du mois
RewriteRule ^20([0-9]+)/([0-9]+)/([0-9]+)$ /archive/20$1/$2 [R=301,L]
# flux atom
RewriteRule ^atom.php /feed/atom [R=301,L]
# flux rss
RewriteRule ^rss.php /feed/rss2 [R=301,L]
# Les archives de catégories (ex: /Linux-admin/2010/01) n'existent plus. 
# On le redirige sur les catégories (ex: /Linux-admin)
RewriteRule ^([A-Z][A-Za-z0-9_-]*)/(.*) /category/$1 [R=301,L]
# redirige les catégories (identitiées par une majuscule au début)
RewriteRule ^([A-Z][A-Za-z0-9_-]*)$ /category/$1 [R=301,L]
#
# Si le fichier demandé n'existe pas physiquement
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Et qu'il n'est pas déjà réécrit
Rewritecond %{REQUEST_URI} !^/index.php.*$
# On envoie la demande à l'index de Dotclear
RewriteRule (.*) /index.php/$1 [L]

Explication du fonctionnement des règles de réécriture d'url :

  • La première règle a pour but d'activer la réécriture.
  • La suivante traite toutes les pages commençant pas un p majuscule et suivi d'un nombre quelconque de chiffre, ce qui gérait mes pages statiques
  • La suivante réécrit les posts d'archive de "/2010/01/xxxxx" à "/archive/2010/01/xxxxx"
  • La suivante réécrit les articles de "/2010/01/01-xxxxx" à "/post/2010/01/01-xxxxx"
  • La suivante réécrit les archives des billets du jour (n'existe plus sur DC2) en archvive des billets du mois, de "/2010/01/01" à "/archive/2010/01"
  • Les deux suivantes traitent les flux atom et rss
  • Les deux suivantes gèrent les archives de catégorie par mois, qui sur DC2 n'existent plus. On va donc les rediriger sur les archives globales de catégories. * Comme les catégories commencent par une majuscule, et que les ces archives par mois sont suivies de l'année et du mois, notre travail d'identification est simplifié. On va réécrire de "/Linux-admin/2010/01" à "/category/Linux-admin". Notez le L majuscule sur Linux.
  • La suivante gère la réécriture des catégories. Comme le cas particulier des archives de catégories a été traité ci dessus avec de conditions plus restrictives, ca marche. C'est toujours la première majuscule sur l'url qui nous sert de déclencheur. On va réécrire de "/Linux-admin" à "/category/Linux-admin".
  • Les 2 suivantes sont pour éviter que la réécriture n'ait lieu lors de l'accès à des répertoires ou fichiers existants sur la réécriture finale
  • La suivante est pour éviter que la réécriture finale n'ait lieu si elle a déjà eu lieu
  • La dernière règle gère la réécriture finale, c'est à dire l'ajout de l'index.php au début de l'url

Notez que toutes les règles de redirection de DC1 vers DC2 ont un flag [R=301,L], ce qui signifie que c'est une redirection permanente (R=301), afin que Google prenne note que cette page n'exite plus et qu'il faut considérer la nouvelle url. La réécriture finale ne prend bien sur pas cette condition, puisqu'elle est là pour considérer la nouvelle adresse des pages.

Notes :

  • L'installation du plugin Google Tools n'a pas l'air de faire grand chose. En fait, elle ajoute 2 champs dans le bas de la page de "Paramètres du Blog", qui permettent de paramétrer l'identifiant du compte Analytics (UACCT) et le Code de vérification des Google Webmaster Tools. C'est assez discret alors regardez bien...
  • Le plugin Sitemaps, une fois installé ajoutera un menu de plugin spécifique, ainsi que Contactme (qui se nomme "Contactez moi" dans le menu).
  • L'unique flux disponible sur le template que j'ai installé était "Atom". J'ai ajouté les flux sur les commentaires ATOM, les Flux RSS et les flux sur les commentaires en RSS. Pour ce faire, editer les différents fichiers du template qui contiennent
 <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />

Et leur ajouter :

 <link rel="alternate" type="application/atom+xml" title="Commentaires Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}/comments" />
 <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="{{tpl:BlogFeedURL type="rss2"}}" />
 <link rel="alternate" type="application/rss+xml" title="Commentaires RSS2.0" href="{{tpl:BlogFeedURL type="rss2"}}/comments" />

J'espère que ce post aidera les possesseurs de DC1 à migrer vers DC2. En effet, ce n'est pas une mince affaire, surtout en ce qui concerne la réécriture d'URL.