En effet, les moteurs de recherche n'ont aucune raison de modifier une URL dans leur référencement tant qu'ils n'ont pas reçu une erreur quand ils tentent d'accéder à cette URL.

Quelques vérifications s'imposent avant de commencer. Nous allons utiliser l'URL Rewriting d'Apache, et son module mod_rewrite. Nous utiliserons aussi des fichiers .htaccess. Vérifiez donc que tout ceci est pris en charge par le serveur.

Supprimer /dotclear/

Pour que

http://monsite.tld/dotclear/index.php/2006/05/16/94-dotclear-a-la-racine

soit maintenant accessible en

http://monsite.tld/index.php/2006/05/16/94-dotclear-a-la-racine

Nous allons réécrire les URL à la volée pour insérer /dotclear/. Nous allons créer un fichier .ht_access que l'on va placer à la racine du domaine :

RewriteEngine On

# Redirige toutes les URL vers le blog en insérant /dotclear/

# Décommentez cette ligne si vous avez un sous-domaine "blog"
#RewriteCond %{HTTP_HOST} ^blog\.votre_domaine\.fr$

RewriteCond %{REQUEST_URI} !/dotclear/
RewriteRule (.*)$ /dotclear/$1

Vous pouvez tester dès maintenant !

Supprimer /index.php/

Maintenant nous voulons que les URL du type

http://www.catageek.info/index.php/2006/05/16/94-dotclear-a-la-racine

soit accessible en

http://www.catageek.info/2006/05/16/94-dotclear-a-la-racine

et, en plus, nous voulons que les moteurs de recherche mettent à jour leur index.

Nous allons faire 2 opérations :

  • Réécrire les URL à la volée pour insérer /index.php/
  • Signaler aux robots des moteurs de recherche la nouvelle URL sans /index.php/

Mais il y a un petit problème cette fois-ci. Lorsque nous avons supprimé /dotclear/, c'est toutes les URL contenant /dotclear/ qu'il fallait réécrire. Cette fois-ci, nous devons ajouter /index.php/ dans toutes les URL ne contenant pas déjà /index.php/, or les "mauvaises" URL que nous souhaitons déréférencer par les moteurs de recherche contiennent déjà /index.php/. Les "bonnes" URL et les "mauvaises" URL contenant toutes /index.php/, comment les différencier ?

La solution est toute simple : nous renommons le fichier /dotclear/index.php en /dotclear/blog.php : les "mauvaises" URL contiendront toujours /index.php/, et les "bonnes" URL contiennent maintenant /blog.php/, et le tour est joué. il ne reste qu'à faire le tri.

On crée le fichier /dotclear/.ht_access :

RewriteEngine On

# Redirige les URL commençant par /dotclear/index.php vers /
# Puis envoie une erreur 301 Moved Permanently
RewriteCond %{REQUEST_URI} /dotclear/index\.php [NC]
RewriteRule ^index.php/?(.*)$ /$1 [R=301,L]
 
# Réécriture pour insertion de /blog.php/ dans l'URL
# On exclue quelques types de requête
RewriteCond %{REQUEST_URI} !/themes
RewriteCond %{REQUEST_URI} !/ecrire
RewriteCond %{REQUEST_URI} !\.php
RewriteCond %{REQUEST_URI} !\.jpg$
RewriteCond %{REQUEST_URI} !\.png$
RewriteRule (.*)$ /blog.php/$1

L'astuce ici est de renvoyer une erreur "301 Moved permanently" qui sera prise en compte par les robots des moteurs de recherche, qui mettront à jour leur référencement. Consultez l'exemple de mise à jour de l'index Google pour avoir plus de détails, ou bien Google et Yahoo!.

N'oubliez pas de renommer le fichier /dotclear/index.php en /dotclear/blog.php

Enfin, dans /dotclear/conf/dotclear.ini, on modifie cette ligne pour déclarer le blog à la racine :

; URL vers le blog
dc_blog_url = /

Et voilà !