Geeek - Le blog Geek & High-tech

Vous connaissez probablement Confluence ,un Wiki très riche édité par Atlassian qui permet de construire rapidement des espaces collaboratifs pour des projets informatiques.
Ce produit est excellent, l'un des seuls inconvénients que l'on pourrait lui reprocher est son algorithme de construction d'URL un peu simpliste qui consiste à construire des URL "propres" seulement si le titre de la page contient des caractères ASCII.

Cette règle fonctionne bien pour des sites anglophones. Cependant dès lors qu'un caractère accentué apparaît dans le titre d'une page, les URL générées sont des identifiants numériques dénuées de sens syntaxique ....

Exemple d'une URL propre :

https://mon-wiki/display/SPA/Introduction

Exemple d'une URL basée sur l'ID du contenu dès lors que le titre contient un caractère non ASCII :

https://mon-wiki/pages/viewpage.action?pageId=327894

Dans le cadre d'un usage interne, cette règle n'est pas importante, elle l'est cependant dès lors que Confluence est utilisé pour publier du contenu sur Internet. Les mots clefs contenus dans les URL étant pris en compte comme règle de SEO, la construction de l'URL des pages est donc très importante.

La bonne nouvelle est que Atlassian partage le code source de ces outils et que la modification nécessaire pour permettre à Confluence de mieux supporter les accents dans les titres est très simple à réaliser.

Le patch consiste à supprimer les accents dans la fonction getPageUrl de la classe GeneralUtil avant d'appeler la fonction isSafeTitleForUrl qui permet de décider si l'URL de la page à utiliser peut être propre ou non.

Cette classe se trouve dans l'arborescence suivante du code source :

confluence-project/confluence-core/confluence/src/java/com/atlassian/confluence/util

Pour cela on peut s'appuyer sur la fonction stripAccents de la classe StringUtils disponible dans la librairie Commons Lang3.


    public static String getPageUrl(AbstractPage page) {
        if (page == null || (page.isLatestVersion() && page.getSpace() == null))
            return "";

        String title = page.getTitle();

        /**
          * @HACK : Suppression des caractC(res accentuC)s avant vC)rification 
          * de l'C)ligibilitC) du titre C  C*tre utilisC) comme URL
          **/ 
        title = org.apache.commons.lang3.StringUtils.stripAccents(title);
        	
        // only use simple/nice page url if the page does not contain:
        // - non-ASCII characters
        // - '+' or '-' characters because these can be picked up by the insert and stripe through filters
        // - double quotes (") because orion doesn't play nicely with them (CONF-1287)
        // - ends in punctuation (CONFDEV-3995)
        if (isSafeTitleForUrl(title) && page.isLatestVersion())
            return toDisplayUrl(page);
        else
            return getIdBasedPageUrl(page);
    }

Une fois la modification réalisée, vous devrez compiler la classe et patcher le JAR "confluence-X.X.X.jar" avec le fichier "GeneralUtil.class" compilé.
Cette petite modification vous permettra d'obtenir de belles URL sur votre serveur Confluence malgré l'utilisation de caractères accentués de la langue française.

Il est possible d'aller plus loin pour construire des URL plus "SEO friendly", cependant l'outil est conçu pour retrouver un contenu en comparant l'URL reçue aux titres des pages ... Une suggestion d'évolution a été proposée à Atlassian pour ajouter un attribut URL aux pages afin de séparer le contenu du titre des pages aux URL des contenus. Wait & see !


Vous êtes correctement abonné à Geeek
Bienvenue ! Vous êtes correctement connecté.
Parfait ! Vous êtes correctement inscrit.
Votre lien a expiré
Vérifiez vos emails et utiliser le lien magique pour vous connecter à ce site