Note : les explications ci-après sont faites pour un hébergement supportant le path_info et un DotClear réglé sur ce mode. C'est adaptable en Query_String et même plus simple puisqu'on peut s'arrêter à la deuxième étape.

DotClear dans un sous-répertoire

Imaginons qu'on range DotClear dans un répertoire dotclear ; dans la config, on note /dotclear/index.php/ comme URL vers le weblogue et /dotclear comme Emplacement de l'application. Les adresses ressembleront alors à ça :

  • http://monsite.net/dotclear/
  • http://monsite.net/dotclear/index.php/Categorie
  • http://monsite.net/dotclear/index.php/2005/05/05/42-post-titre

(en QueryString : /dotclear/ comme URL, pour des adresses http://monsite.net/dotclear/?Categorie)

C'est pas mal, mais on le voudrait accessible à la racine, alors ?

Copie de l'index à la racine :

On copie le fichier /dotclear/index.php à la racine, puis on décommente et on modifie la ligne qui va initialiser le $app_path au début de ce fichier pour qu'elle pointe sur le répertoire dans lequel on a installé DotClear : $app_path = '/dotclear/';. Ensuite, on va modifier dans la configuration l'URL vers le weblogue pour pointer vers /index.php/. Les adresses vont maintenant être celles-ci :

  • http://monsite.net/
  • http://monsite.net/index.php/Categorie
  • http://monsite.net/index.php/2005/05/05/42-post-titre

(en QueryString : / comme URL, pour des adresses http://monsite.net/?Categorie, et on a fini.)

Déjà, c'est mieux. Mais diantre, que ce index.php est laid ...

Une plus jolie adresse de base.

Si votre serveur supporte vraiment le path_info et gère l'option Multiviews, il est possible de remplacer ce /index.php/ par quelque chose de plus joli, mettons blog par exemple. Pour ce faire, renommez index.php en blog.php, assurez vous d'activer l'options Multiviews dans votre .htaccess de la sorte :

Options +MultiViews

Puis allez modifier dans la configuration l'URL vers le weblogue pour pointer maintenant vers /blog/ ... Magie, vos pages sont maintenant accessibles aux adresses suivantes :

  • http://monsite.net/blog/
  • http://monsite.net/blog/Categorie
  • http://monsite.net/blog/2005/05/05/42-post-titre

C'est quand même plus joli. Ben oui, mais à http://monsite.net/, on n'a rien... On peut aller jusqu'au bout ?

À fond !

C'est maintenant qu'on s'amuse, en fignolant un petit .htaccess bien senti : on va réécrire les URLs à la vollée. Indiquons ça dans notre fichier par RewriteEngine On, puis allons réécrire les adresses, mais sous certaines conditions : il ne faut pas réécrire les adresses qui pointent réellement vers quelque chose, par exemple vers le répertoire /dotclear/, qui existe réellement. Comme on va tout rediriger vers le fichier blog.php, il faut éviter de rediriger celui-ci vers lui même; si on ne veut pas partir dans une boucle sans fin. Hormis ceux-là (et d'autres à votre convenance, on peut penser par exemple à un robots.txt), on redirige donc tout vers blog.php, ça donne ce .htaccess là :

RewriteEngine On
RewriteCond %{REQUEST_URI} !dotclear
RewriteCond %{REQUEST_URI} !blog
RewriteRule (.*)$ /blog.php/$1

Il ne reste plus qu'à faire pointer l'URL vers le weblogue vers / et on se retrouve avec les adresses suivantes :

  • http://monsite.net/
  • http://monsite.net/Categorie
  • http://monsite.net/2005/05/05/42-post-titre

C'est pas classe, ça ? Attention : les RewriteRules peuvent demander beaucoup de ressources au serveur, ne soyez pas étonné si votre hébergeur vous demande des comptes.

Mes rewriterules ne fonctionnent pas !

Ça arrive, le .htaccess est une petite bête délicate qui nécessite des bons réglages chez l'hébergeur. Il suffit de rien pour qu'il soit ignoré ou même qu'il nous balance une erreur 500 de derrière les fagots. Si c'est le cas, on oublie le fichier en question et on passe au plan B : on copie le blog.php en index.php, ce qui va permettre d'avoir la page de garde à la racine, mais qui pointant sur /blog, et tout le monde doit retrouver ses petits. On aura alors, moindre mal, les adresses suivantes :

  • http://monsite.net/
  • http://monsite.net/blog/Categorie
  • http://monsite.net/blog/2005/05/05/42-post-titre

Allez, maintenant, un bisou à Mémé, et tout le monde au lit.