Intéressé par des cours d'informatique en ligne ?
Visitez mon nouveau site https://www.yesik.it !

Dans MediaWiki, il est possible d'avoir plusieurs pages qui mènent au même article. C'est un comportement que vous avez peut-être déjà eu l'occasion d'observer sur Wikipedia où, par exemple, les pages Wiki concept, WikiWiki ou Wiki-wiki mènent toutes à l'article Wiki. De telles pages sont appelées pages de redirection. Or s'il est possible à un éditeur de créer des redirections vers un autre article du même wiki, pour prévenir les abus MediaWiki n'accepte pas directement les redirections vers un site externe.

Occasionnellement, c'est une limitation que vous pouvez souhaiter contourner. Ainsi, dans mon cas particulier, suite à la migration de certaines pages d'un wiki à un autre, je souhaitais pouvoir rediriger de façon transparente les utilisateurs vers le nouveau site. Ici, le site destination était aussi sous MediaWiki. Mais ça n'est pas une obligation. Le même principe serait donc applicable pour rediriger vos visiteurs vers un forum, un blog ou n'importe quel autre site.

Nous allons donc voir ici comment faire une redirection sur un site externe avec MediaWiki.


Page de redirection

Une page de redirection dans MediaWiki est une page dont le contenu commence par une ligne de la forme suivante:

#REDIRECT [[destination]]

destination est la page du Wiki vers laquelle l'utilisateur doit être redirigé. Pour reprendre un des exemples donné en introduction, voici ce qu'on trouve quand on édite la page WikiWiki sur Wikipédia. Vous pouvez le vérifier en suivant le lien http://en.wikipedia.org/w/index.php?title=WikiWiki&action=edit – ou en chargeant directement le wikitext de la page:

sh$ curl 'http://en.wikipedia.org/wiki/WikiWiki?action=raw'
#REDIRECT [[Wiki]]

Accessoirement, une page de redirection peut avoir un contenu après le #REDIRECT. Ce contenu n'est pas affiché – sauf quand on édite la page ou qu'on visualise le wikitext de celle-ci:

sh$ curl 'http://en.wikipedia.org/wiki/Wiki-wiki?action=raw'
#redirect [[Wiki]]

A "wiki wiki" is a common breakfast in the Hawaiian islands. While the exact 
item varies slightly, it generally includes a scoop or more of rice, a hamburger
patty and possibly gravy, and a fried egg on top.

Par contre il n'est pas possible d'utiliser directement une URL pour rediriger vers un site externe. Par conséquent, l'exemple suivant ne fonctionne pas:

#REDIRECT [[http://www.chicoree.fr/w/Accueil]]

Liens interwiki

La solution pour rediriger vers un site externe est d'utiliser les liens interwiki. Il s'agit d'un mécanisme qui permet dans MediaWiki de traiter une référence à une page d'un site externe comme s'il s'agissait d'une référence à un article local. Autrement dit, avec les liens interwiki, il devient possible d'utiliser un lien externe partout où il est possible d'utiliser un lien vers un article du wiki (c'est à dire partout où on peut utiliser la notation entre doubles crochets [[...]]).

Ainsi, un lien interwiki ressemble comme deux gouttes d'eau à un lien ordinaire. A ceci près qu'il spécifie le préfixe du site destination. Une installation standard de MediaWiki est configurée par défaut avec un certain nombre de liens interwiki. Par exemple, pour créer un lien vers un article de Wikipédia, on peut écrire: [[wikipedia:Wiki]]. Dans ce lien, wikipedia: est le préfixe qui permet d'identifier le site destination, et Wiki la page du site qui nous intéresse.

Tout le secret pour créer un lien externe, va donc être d'ajouter une entrée dans la table interwiki pour désigner le site externe que vous voulez pouvoir utiliser:

INSERT INTO mw_interwiki(iw_prefix,iw_url,iw_local,iw_trans)
       VALUES('chicoree', 'http://www.chicoree.fr/w/$1', 1, 0)

Piège:

Le nom exact de la table dépend de votre installation de MediaWiki. Dans mon cas, à l'installation j'ai choisi le préfixe mw_ pour les tables de MediaWiki, d'où le nom mw_interwiki. Selon le préfixe que vous avez choisi (ou l'absence de préfixe) vous devrez changer le nom de la table dans la requête ci-dessus.

Dans tous les cas, le nom des champs commencera toujours par iw_: iw_prefix, iw_url, iw_local, iw_trans.

iw_prefix chicoree Le préfixe permettant d'identifier ce lien interwiki.
iw_url http://www.chicoree.fr/w/$1 L'URL du site associé avec ce lien interwiki. Le $1 sera remplacé dynamiquement par le nom de la page destination.
iw_local 1 Accepter (à 1) ou refuser (à 0) les redirections utilisant ce lien interwiki.
iw_trans 0 Accepter (à 1) ou refuser (à 0) les transclusions utilisant de ce lien interwiki. Pour que la transclusion interwiki soit possible, il faut aussi que la variable $wgEnableScaryTranscluding soit mise à 1 dans la configuration du site.

Désormais, il devient possible de créer des liens vers le site externe, comme s'il s'agissait de liens internes à votre wiki. La seule exigence étant de préciser le préfixe du lien interwiki en plus de la page destination:

[[chicoree:page destination]]

Redirections externes

Si ce que je viens de dire est valable pour les liens directs, ça l'est aussi pour les redirections car j'ai positionné iw_local à 1. Ainsi, pour en revenir à mon besoin, je peux donc rediriger vers le site externe, comme si c'était une redirection vers une autre page du wiki. À nouveau, il suffit juste que je précise le préfixe adéquat – à la manière d'un lien vers un namespace:

#REDIRECT [[chicoree:page destination]]

Et comme dans mon cas particulier, il s'avère que les pages source et destination ont le même nom, je peux même utiliser la notation suivante qui me permet d'éviter d'éventuelles fautes de frappe dans le titre:

#REDIRECT [[chicoree:{{subst:PAGENAMEE}}]]

Voir la page de redirection

Une fois la redirection mise en place, il n'est plus possible de visualiser directement la page de redirection. En effet, les redirections externes sont mises en oeuvre via une réponse http 302 Moved Temporarily – qui indique au navigateur de suivre automatiquement le lien vers la page cible.

Pour visualiser la page de redirection, vous devrez ajouter ?redirect=no à l'URL de la page de redirection:

http://monsite/wiki/Article?redirect=no

Ressources