Utiliser zola pour créer des urls raccourcies
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:
= "Raccourcis"
= "l.html"
= "redirect.html"
Chaque page
contiendra un lien et une description, par exemple pour
emacs, le fichier emacs.md
est le contient:
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>
Redirect
Click here to be redirected.
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.