Url rewriting sur dotclear
Par Wam mania le jeudi, août 14 2008, 16:55 - The web - Lien permanent

mmmm
Je viens de me rendre compte que dotclear ne propose que 2 choix pour la réécriture d'URL.
- Le QUERY_STRING, c'est à dire par l'utilisation de $_SERVER['QUERY_STRING'] qui consiste globalement à parser tout ce qui suis le ? dans l'adresse. Ainsi on aurait http://www.wamania.com/index.php?/url-rewriting-sur-dotclear.
Pourquoi c'est mal?
Déjà parce que c'est moche ! Ensuite parce que google n'aime pas. Dès qu'il y a un ?, il zappe.
- Le PATH_INFO, utilisé avec une option d'apache (souvent dans le virtualhost) : le MultiViews
<Directory /var/www/wamania.com>
Options MultiViews
....
</Directory>
Pour expliquer, voici un exemple :
Nous prenons l'URL
http://www.wamania.com/index/url-rewriting-sur-dotclear
En gros, on a tout écrit sous forme de répertoire. En effet, si apache ne trouve pas de répertoire avec le bon nom (ici index) alors il cherche les fichiers possibles, et trouve donc index.php, ce qui suis étant transformé ensuite en QUERY_STRING. Ceci permet d'avoir des URL sans .php? mais laisse quand même un /index/ pas cool, et surtout beaucoup de contraintes (si un répertoire existe, il est prioritaire sur le fichier !)
Bref, tout ça, c'est de l'URL-bidouilling.
Pour un vrai URL-rewriting, il faut absolument avoir le mod_rewrite d'apache activé sur son hébergement !
Le plus simple à mon avis, c'est de configurer dotclear pour le QUERY_STRING (le PATH_INFO necessite l'option MultiViews d'apache, et est plus contraignant), en mettant en url http://toto.com/
Il nous reste maintenant à rediriger vers notre ancien index.php?
Nous utilisons pour cela un fichier .htaccess à placer à la racine du blog
<IfModule mod_rewrite.c>
RewriteEngine On
## Si le blog n'est pas à la racine du site !
#RewriteBase /blog
## Si le fichier/dossier existe, on passe son chemin
## Ca evite de réécrire les adresses des images par exemple
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
## et enfin, on réécrit
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
</IfModule>