Réécriture d'urls avec dotclear 2 chez OVH

La réécriture d'url n'est pas des plus simples à mettre au point. OVH, mon hébergeur, n'y met pas tellement du sien! Quoi qu'il en soit, à force de lire des choses à droite et à gauche, j'ai fini par trouver une configuration qui fonctionne.

J'avais comme volonté de ne pas faire apparaître le controleur (index.php) dans l'url; encore moins le point d'intérrogation.

Pour cela, il faudrait en théorie choisir comme type d'url path_info. Pour des raisons pas très claires, OVH a désactivé ce mode. Donc pas trop le choix, on doit se contenter de query_string. Mais aussi bizarre que cela puisse paraître, cela fonctionne!

Donc j'ai placé mon contrôleur à la racine de mon hébergement (dans www). J'ai l'ai légèrement modifié pour qu'il aille chercher le fichier prepend.php au bon endroit:
require dirname(__FILE__).'/journal/inc/public/prepend.php';

Après il suffit de mettre cela dans le fichier .htaccess:

SetEnv PHP_VER 5
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?$1

La première ligne est là pour pouvoir utiliser php en version 5 au lieu de la version 4. Les autres lignes sont simples à comprendre pour n'importe qui ayant déjà joué avec les réécritures d'url. On veut que l'une des conditions soient vérifiées: soit l'url pointe vers un fichier ou un dossier. Dans ce cas, on applique l'unique règle et on passe toute l'url en paramètre au controleur.

De cette manière, les urls sont satisfaisantes mais pas tout à fait. En passant de la version 1 à la version 2 de dotclear, les urls ont changé mais les vieux billets indéxés n'ont plus des urls correctes. En effet, par défaut, l'url d'un billet commence par /post.. J'ai donc encore modifié mon fichier .htaccess pour virer ce post disgracieux. Il ressemble désormais à ça:

RewriteEngine on 
RewriteRule ^([0-9]{4})/(.*)$ /index.php?post/$1/$2 [L]
RewriteRule ^(page|archive|feed|tag|category)/(.*)$ /index.php?$1/$2 [L]
RewriteRule ^(archive|tags) /index.php?$1 [L]

Je considère que toutes les url qui commencent par une année sont un article (post). Toutes les autres sont traitées normalement. Pour que cela fonctionne, j'ai modifié le fichier inc/prepend.php à la main comme un goret. Je le modifierais "proprement" un peu plus tard via un plugin ce qui me donnera l'occasion de m'y mettre! J'ai modifié la ligne suivante (ligne 166):

$core->url->register('post','post','^post/(.+)$',array('dcUrlHandlers','post'));
en
$core->url->register('post','','^post/(.+)$',array('dcUrlHandlers','post'));

Remarque finale : contrairement à ce que certains prétendent ici et là, la réécriture d'url fonctionnent parfaitement sur OVH que le mod gzip soit activé ou non

Haut de page