Sèkun blog


Utiliser zola pour créer des urls raccourcies

2024-08-03 dev | tags : zola

Contexte

J'ai longtemps utilisé yourls pour créer des urls raccourcies, il fonctionnait bien, mais c'est encore un service en plus à maintenir et je ne m'intéressais pas à ses fonctionnalités supplémentaires, comme des statistiques sur le nombre de clics.

Ensuite, j'ai simplement créé un dossier avec des redirections via un fichier .htaccess et les RewriteRule d'Apache. Aucune maintenance, mais je devais me connecter à mon hébergement pour récupérer une url, et il n'y avait pas moyen de créer une page de partage en ligne. Une option aurait été d'utiliser 11ty, j'aurais pu rallier les deux mondes: faire apparaître sur mon blog un liste d'url raccourcies et en même temps générer un fichier .htaccess. Sauf que, comme précisé dans l'article précédent, Zola (ssg avec lequel ce blog est généré) ne permet que de générer du contenu html.

Mise en œuvre

J'ai créé un dossier nommé l, dont l'arborescence est la suivante:

l/
├── _index.md
├── croc.md
├── emacs.md
└── tmux.mdygg.md

Dans le fichier _index.md, je précise classiquement le fichier de template (via template) qui me permettra de lister tous les liens, et le fichier de template pour toutes les pages (via page_template), qui fera la redirection. Les métadonnées du fichier _index.md sont les suivantes:

title = "Raccourcis"
template = "l.html"
page_template = "redirect.html"

Chaque page contiendra un lien et une description, par exemple pour emacs, le fichier emacs.md est le contient:

+++
[extra]
url = "https://git.sekun.eu/sekun/utils/raw/branch/main/config/emacs/minimal_config.el"
+++

Une configuration minimale d'emacs que j'installe sur la plupart des serveurs.

Dans le fichier de template me servant à lister les liens, j'accède à la description d'une page via page.content | markdown(inline=true) | safe: le inline=true est important car sinon le contenu est placé dans un paragraphe en html.

Le fichier de redirection est une copie de celui utilisé par Zola:

{% set url = page.extra.url %}
<!doctype html>
<meta charset="utf-8">
<link rel="canonical" href="{{ url|safe }}">
<meta http-equiv="refresh" content="0; url={{ url|safe }}">
<title>Redirect</title>
<p><a href="{{ url|safe }}">Click here</a> to be redirected.</p>

Utiliser l'élément meta http-equiv="refresh" est bien défini en html. L'inconvénient de cette approche est qu'il faut interpréter le document html pour faire la redirection, chose que ne fait pas curl par exemple.

Article publié le 3 août 2024.