Beaux URL et rewriterules

Ou comment obtenir de beaux URL même lorsqu'on n'a pas accès à la configuration d'apache.

Cette page explique pas à pas comment transformer en quelques étapes les URL de votre DokuWiki chez free :

  1. http://login.free.fr/doku.php?id=:demo:pagemod:demo1
  2. http://login.free.fr/doku.php/demo:pagemod:demo1
  3. http://login.free.fr/doku/demo:pagemod:demo1
  4. http://login.free.fr/wiki/demo:pagemod:demo1
  5. http://login.free.fr/wiki/demo/pagemod/demo1

Vous pouvez aussi suivre le tuto vidéo qui vous montrera comment faire en 10 minutes.


Par défaut, dokuwiki fait des URL laids et mal indexés par les moteurs de recherche. Dokuwiki propose deux méthodes de réécriture pour obtenir des URL plus jolis. Quand on peut modifier la configuration d'Apache (ou d'autre serveur web), il n'y a qu'à suivre la documentation officielle sur fr:rewrite.

Chez free.fr on ne peut pas modifier suffisamment la configuration d'Apache. Les réglages du fichier .htaccess fourni avec dokuwiki ne sont pas pris en compte. Il ne reste donc qu'une seule méthode de réécriture, ce qui permet d'améliorer tout de même considérablement la situation. En changeant le paramètre userewrite à dokuwiki, on passe d'URL très laids tels que http://login.free.fr/dokuwiki/doku.php?id=wiki:syntax à des URL presque convenables comme celui là : http://login.free.fr/dokuwiki/doku.php/wiki:syntax.

Mais il reste encore et toujours ce fichu doku.php dans le bazar. Il n'est pas possible de le faire disparaitre entièrement, mais on peut tout de même enlever le .php si vilain. On peut également changer le nom, utiliser d par exemple ou sbouirtkx si on veut à la place de doku; mais je préfère d, allez savoir pourquoi. Il faut juste ruser un peu.

exemples de renommage
avant après
http://login.free.fr/dokuwiki/doku.php/wiki:syntax http://login.free.fr/dokuwiki/doku/wiki:syntax
http://login.free.fr/dokuwiki/doku.php/wiki:syntax http://login.free.fr/dokuwiki/d/wiki:syntax
http://login.free.fr/dokuwiki/doku.php/wiki:syntax http://login.free.fr/dokuwiki/wiki/wiki:syntax
et pour un wiki déployé à la racine du site
http://login.free.fr/doku.php/wiki:syntax http://login.free.fr/sbouirtkx/wiki:syntax
http://login.free.fr/doku.php/wiki:syntax http://login.free.fr/wiki/wiki:syntax
http://login.free.fr/doku.php/wiki:syntax http://login.free.fr/MonSuperWiki.Version.2/wiki:syntax
http://login.free.fr/doku.php/wiki:syntax http://login.free.fr/etc…/wiki:syntax

1ère étape : faire en sorte que dokuwiki génère de beaux url

Choisir un nom, comme d, wiki ou mon-wiki, composé seulement de lettres sans accent, de quelques chiffres et éventuellement de quelques tirets ou autres soulignés. bannir les espaces, lettres accentuées ou avec cédille.

Dans le fichier inc/preload.php – créez le si besoin –, mettre ceci, où il faudra remplacer les mots __NOM_CHOISI__ par… le nom choisi précédemment.

Par exemple, si vous avez choisi d, alors vous devrez mettre … define('DOKU_SCRIPT', 'd'); si vous avez choisi monsuperwiki, vous devrez mettre … define('DOKU_SCRIPT', 'monsuperwiki'); etc…

<?php
if(!defined('DOKU_SCRIPT')) define('DOKU_SCRIPT','__NOM_CHOISI__');
if($_SERVER['PATH_INFO']=='php') $_SERVER['PATH_INFO']='';

NB
Si les caractères <?php sont déjà présents dans ce fichier, inscrivez simplement en dessous de <?php les deux lignes if(!defined… et if($_SERVER…, ne rajoutez pas un second <?php

Maintenant, dokuwiki va générer des URL comme ça http://wiki.example.com/d/wiki:syntax pour chaque lien, image, document etc…

Remarque

2ème étape : faire reconnaitre ces URL par le serveur web

Il reste à faire en sorte que ce /d/ (ou tout autre nom choisi) corresponde à quelque chose que le serveur web va comprendre. C'est super simple. renommer (ou copier) le fichier doku.php en __NOM_CHOISI__.php 1). En effet, lorsqu'il cherche un fichier ou un dossier nommé d (ou tout autre nom d'ailleurs), le serveur ne le trouvant pas va essayer d'autres combinaisons qui pourraient satisfaire la requête. Dans le lot, il va essayer d.php, et là, paf ! Ça gagne.

Les finitions

Pour parfaire la solution, il faut légèrement modifier aussi le fichier index.php. Voilà à quoi il devra ressembler

<?php
/**
 * Forwarder to doku.php
 *
 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
 * @author     Andreas Gohr <andi@splitbrain.org>
 * @author     Schplurtz le Déboulonné <schplurtz@laposte.net>
 */
header("Location: __NOM_CHOISI__");

La beauté idéale

Il est possible d'aller encore plus loin en changeant la valeur du paramètre useslash à 1. On a alors des URL de ce genre http://login.free.fr/d/wiki/syntax – le : s'est transformé en /.

Voilà, on a fait le tour. Maintenant les URL sont de beaux URL, facilement et correctement indexés par les moteurs, et l'ensemble est cohérent.

1)
Pour un wiki tout neuf, on pourra renommer le fichier. Pour un wiki pré-éxistant avec du contenu déjà indexé par les moteurs de recherche, il est préférable de copier doku.php, ainsi les deux formes resteront valides et les internautes ne tomberont pas sur l'horrible message de la mort indiquant «404 Page not found» quand il suivront les indications de google