changement de format des URL et redirection .htaccess avec dotclear 1.2

Publié le 27 mars 2008 par Traaf
ma solution

Ayant eu pas mal de difficultés à parvenir à mes fins, j'espère que ce billet évitera ces complications à d'autres :)

Le contexte

Mon installation de dotclear commence à dater, installation faite en utilisant le format QUERY STRING, le tout dans un sous-répertoire dotclear, ce qui produisait jusque là des URL au format :

http://www.breizh-ardente.fr/dotclear/index.php?2008/03/27/99-changement-de-format-des-url-et-redirection-htaccess-avec-dotclear-1
qui sont maintenant de cette forme :
http://www.breizh-ardente.fr/dotclear/99-changement-de-format-des-url-et-redirection-htaccess-avec-dotclear-1

Passage du mode QUERY STRING au mode PATH INFO

Je viens sans difficulté de basculer le tout au format PATH INFO et de simplifier leur apparence (suppression de la date) au moyen du plugin personnalisation d'URLs, en rajoutant une petite astuce de réécriture d'URL pour supprimer aussi le index.php de l'URL.

Mon .htaccess de départ est le suivant :

Redirect temp /index.html http://www.breizh-ardente.fr/dotclear/
ErrorDocument  404  /dotclear/erreur404
AddType application/x-httpd-php5 .php
RedirectPermanent /dotclear/punbb http://forum.breizh-ardente.fr

# RSS Dotclear 1
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule dotclear/rss.php$ http://feeds.feedburner.com/Breizh-ardente [L,R=301]

Commencez par basculer les URLs au format PATH INFO. Connectez vous à votre interface d'administration, onglet «outils», rubrique «configuration de dotclear», champ «Type des URL».

Installez le plugin et choisissez le format qui vous convient

Supprimer index.php de l'URL

Ensuite, toujours dans la «configuration de dotclear», champ «URL vers le weblogue», enlevez index.php de l'adresse du blog

Chez moi, /dotclear/index.php devient /dotclear/

Reste à activer le mod rewrite dans le fichier .htaccess, ce qui passe par les instructions :

RewriteEngine on
RewriteBase /
à rajouter au début du fichier si elles ne sont pas encore présentes, puis rajouter à la fin :
# URL simplifiees
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /dotclear/index.php

En l'état, les nouvelles URLs sont fonctionnelles.

Reconnaitre les anciennes URLs dans les liens externes

La partie qui m'a fait suer : faire en sorte que les liens externes pointant vers des articles existants soient redirigés vers la nouvelle adresse.

La solution passe encore par de la réécriture d'URL, un peu plus avancée cette fois.

Première difficulté : les URL entrantes sont au format QUERY STRING qui n'est plus pris en charge par le blog

Ensuite, une chaine significative de l'URL n'existe tout simplement plus...

Je ne vais pas refaire un tutoriel sur la réécriture d'URL, c'est pas dans mes cordes, je vais juste vous indiquer quelques liens qui m'ont permis de parvenir à mes fins :

Ainsi que quelques notions d'expressions régulières pour établir la règle de réécriture :

Ce qui conduit à établir les règles suivantes :

# anciennes URL
RewriteCond %{QUERY_STRING} ^([0-9]{4})/([0-9]{2})/([0-9]{2})/([0-9]{2,3})-([a-zA-Z0-9-]+)$
RewriteRule ^dotclear/index.php /dotclear/%4-%5? [L,R=301]

# anciennes categories
RewriteCond %{QUERY_STRING} ^([A-Z][a-zA-Z0-9-]+)$
RewriteRule ^dotclear/index.php /dotclear/%1? [L,R=301]
À placer dans le fichier .htaccess AVANT la partie #URL simplifiees

En résumé :
Le changement de format d'URLs oblige à passer par la condition RewriteCond %{QUERY_STRING} au lieu d'une simple règle RewriteRule
Le détail important : le caractère ? à la fin de l'URL réécrite, toujours à cause de l'ancien format QUERY STRING
Indispensable : les options [L,R] en fin de règle pour éviter une erreur 500