====== Beaux URL et rewriterules ======
Ou comment obtenir de [[http://www.bortzmeyer.org/beaux-urls.html|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 :
- %%http://%%login.free.fr/doku.php?id=:demo:pagemod:demo1
- %%http://%%login.free.fr/doku.php/demo:pagemod:demo1
- %%http://%%login.free.fr/doku/demo:pagemod:demo1
- %%http://%%login.free.fr/wiki/demo:pagemod:demo1
- %%http://%%login.free.fr/wiki/demo/pagemod/demo1
Vous pouvez aussi suivre le [[dokuwiki:tutovid-beaux-url|tuto vidéo]] qui vous montrera comment faire en 10 minutes.
-----
Par défaut, [[doku>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 [[doku>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 [[doku>fr:config:userewrite|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...
**NB**\\
Si les caractères ''dokuwiki]] va générer des URL comme ça ''%%http://wiki.example.com/d/wiki:syntax%%'' pour chaque lien, image, document etc...
++++Remarque|
Que vient faire la ligne
if($_SERVER['PATH_INFO']=='php') $_SERVER['PATH_INFO']='';
Dans cette histoire ? C'est très simple. Le fichier est ''d.php'' (ou tout autre nom choisi). Mais on a enlevé le ''.php'' dans l'URL, pour faire plus joli. Et donc lorsque la page principale du wiki est demandée de cette manière ''%%http://login.free.fr/d%%'', le serveur donne ''php'' comme paramètre au script ''d'', qui, du coup va chercher une page appelée ''php'' à la racine du wiki... Le plus simple est donc d'introduire la logique suivante : si page demandée est ''php'', alors ne pas prendre en compte la page demandée (dokuwiki servira alors la page d'accueil du site, ce qui est dans ce cas, le comportement correct) .\\
\\
Notez par contre que l'URL ''%%http://login.free.fr/d/%%'' (qui se termine par ''/'') ne pose pas ce problème.\\
\\
Enfin, que se passe-t-il s'il y a une page appelée ''php'' à la racine du wiki. Je ne sais pas, mais mon petit doigt me dit qu'il faudra alors enlever la ligne ''if($_SERVER['PATH_INF...''...
++++
===== 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'' ((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)). 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
* @author Schplurtz le Déboulonné
*/
header("Location: __NOM_CHOISI__");
===== La beauté idéale =====
Il est possible d'aller encore plus loin en changeant la valeur du paramètre [[doku>fr:config:useslash|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 [[http://www.bortzmeyer.org/beaux-urls.html|beaux URL]], facilement et correctement indexés par les moteurs, et l'ensemble est cohérent.
/* Ce serait idiot de le faire, la redirection par index.php fonctionne déja
===== Le coup de grâce =====
Une dernière chose. Si ce wiki est la seule chose //visible// qui existe à la base du site, on peut placer une redirection HTML dans un fichier ''index.html'' vers ''/d/'' (out tout autre nom choisi) comme ceci :
Redirection
Redirection
*/