Mot-clef « Nécromancie »

Restauration des anciennes URL des articles

Un des derniers points qui manquaient depuis la résurrection de ce blog était de faire refonctionner les anciennes URL des articles.

En effet, lors du passage sous Jekyll, d’une part le nommage des articles a été modifié (par défaut Jekyll les met en .html là où ma réécriture d’URL sous WordPress me les faisait juste finir par un /) et d’autre part j’ai changé de domaine, passant de wp.darathor.com à blog.darathor.net.

Il manquait donc deux opérations :

  1. rediriger l’ancien domaine vers le nouveau
  2. rediriger les anciennes URL vers les nouvelles

La première étape n’a rien de compliqué et se fait assez rapidement dans la configuration des VHOST d’Apache.

La seconde est un peu moins immédiate puisqu’il m’a fallu construire la table de correspondance des anciennes URL vers les nouvelles.

J’ai choisi comme stratégie de stocker une liste d’alias dans l’en-tête de chaque articles et de générer un fichier .htaccess à partir de ça.

Déclaration des alias

La déclaration des alias est assez simple et se limite à une liste d’URL relatives :

aliases:
- /?p=3
- /2007/05/01/ouverture-du-site/

L’avantage de fonctionner avec une liste d’alias en URL relatives c’est que cette même mécanique peut être ré-exploitée si je veux changer l’URL d’un article par la suite (notamment pour corriger une coquille).

Reste à l’alimenter dans mon cas de migration depuis WordPress.

Le script de migration de WordPress vers Jekyll m’avait extrait une entrée de la forme wordpress_url: http://wp.darathor.com/?p=10 contenant une des formes d’URL proposée par WordPress. Par contre il ne s’agissait pas de la forme générée par la réécriture automatique de WordPress qu’il m’a fallu reconstruire pour aboutir aux deux alias ci-dessous. J’ai finalement choisi de garder les deux URL à chaque fois étant donné que les deux pointaient sur le contenu et que je n’aime pas les liens morts.

Génération du fichier .htaccess

Dans mon cas j’utilise Apache comme serveur web, donc je peux passer par un fichier .htaccess ce qui a un gros avantage : tout reste stocké dans le code versionné et déployable automatiquement sans aller toucher au VHOST.

Pour générer ce fichier j’ai procédé comme pour le robots.txt via une simple page nommée htaccess (sans extension sinon à la génération Jekyll la colle arbitrairement derrière le permalien) :

---
layout: null
permalink: .htaccess
---

ErrorDocument 404 /404.html

{% for page in site.pages -%}
{%- if page.aliases -%}
{%- for alias in page.aliases -%}
  Redirect 301 {{ alias }} {{ page.url }}
{% endfor -%}
{%- endif -%}
{%- endfor -%}

{% for post in site.posts -%}
{%- if post.aliases -%}
{%- for alias in post.aliases -%}
  Redirect 301 {{ alias }} {{ post.url }}
{% endfor -%}
{%- endif -%}
{%- endfor -%}

On retrouve donc l’en-tête avec un layout: null pour que le fichier généré ne soit pas habillé d’une structure HTML et un permalink: .htaccess indiquant le nom du fichier à générer.

Ensuite le contenu consiste en une simple boucle sur les articles avec à chaque fois une boucle sur les alias pour générer les redirections 301.

J’en ai également profité pour ajouter la ligne ErrorDocument 404 /404.html qui dit à Apache d’utiliser une page 404 personnalisée plutôt que la page par défaut.


Ajout du 07/10/2018 à 12h30

Dans mon .htaccess je ne gérais les alias que pour les articles et pas pour les pages. J’ai mis à jour le code ci-dessus pour en tenir compte également.


Retour du blog

Ça faisait déjà près d’un an et demi que ce blog était mort suite à un crash serveur. Je ne pouvais pas le remettre en fonction directement parce qu’il utilisait une vieille version de WordPress qui n’était pas compatible avec PHP7 et je n’avais pas envie de pourrir mon nouveau serveur avec un vieux PHP. Quant à la mise à jour de WordPress était dissuasive parce que j’avais de nombreuses versions de retard et que ça se serait forcément fait dans la douleur.

En parallèle j’avais vu passer plusieurs articles parlant de remplacer WordPress et autres moteurs dynamiques par un générateur de site statique. Cet aspect me tentait bien mais pas pour les raisons avancées habituellement, en particulier la principale : les perfs je m’en fiche un peu (mon serveur se tourne les pouces la plupart du temps et j’ai une audience limitée).

Non, ce qui m’intéressait c’était plutôt de supprimer la maintenance et le besoin de mise à jour, soit précisément ce qui m’a fait repousser la remise en ligne du blog (et ce qui me causait sans doute de grosses failles de sécurité sur le précédent serveur). En effet, dans ce cas le générateur n’est pas en ligne, je peux le garder tranquillement en local sur mon ordi perso.

Par contre, ça a plusieurs gros inconvénients qui m’ont retenu de sauter le pas plus tôt, en particulier deux :

  • Pas de système de commentaires. C’est embêtant parce qu’il est exclus que je délègue ça à un silo genre Discuss. Et si c’est pour remettre du JS et un système de web services ben on reperd direct l’intérêt principal de s’éviter la maintenance… Je n’ai pas de solution correcte pour l’instant donc il faudra s’en passer (genre en passant par Mastodon ou à défaut Twitter), jusqu’à ce que je trouve quelque chose de viable.
  • Pas de moteur de recherche. Moins gênant mais quand même déléguer à Google et autres la recherche interne du site ça me déplaît pas mal. Là non plus je n’ai pas de solution pour l’instant (j’ai trouvé un plugin qui permettrait de le faire mais en passant par une API tierce, donc bon, on n’y gagne pas grand-chose au final).

J’ai finalement décidé de sauter le pas parce que ça m’est arrivé quand même assez souvent de me dire que j’aurais bien fait un article sur un sujet mais qu’en l’absence de blog j’ai soit rien fait, soit résumé en quelques pouets et/ou tweets.

J’ai donc cherché un peu dans les outils existants. Forcément y en a des dizaines… Du coup faut choisir. Après avoir écarté tout ce qui est NodeJS et rien trouvé en PHP, je me suis rabattu sur Jekyll (en Ruby) qui a le mérite d’avoir un peu d’ancienneté et donc pas mal de plugins dispo et probablement une durée de vie pas trop basse.

Après avoir rencontré pas mal de problèmes tels que :

  • besoin de choisir un thème
  • besoin d’installer des plugins et configurer plein de choses (Jekyll de base est assez vide)… pour la liste des plugins, cf. la page à propos
  • du temps perdu à comprendre que si ma pagination était morte d’un coup c’était parce que j’avais reformaté le fichier (oui les pages contiennent des en-têtes en YAML qui a l’idée VRAIMENT débile de se baser sur l’indentation, donc un formatage et boum ça marche plus… et vas-y pour comprendre que ça vient de là !)
  • repasser sur tous les articles pour faire en sorte que ça se rende bien (un convertisseur depuis une base WordPress est dispo mais il ne convertit pas les balises spécifiques… et j’en avais pas mal pour du code ou de la mise en forme autour des images)

J’ai enfin quelque chose de fonctionnel \o/

J’en profite également pour basculer sur un autre domaine (en .net plutôt que .com).

Il reste à mettre en place les redirections pour ressusciter les anciennes URL des articles mais ça peut attendre, après un an et demi, on est plus à quelque semaines près… Et il risque d’y avoir encore quelques ajustements mais ça a déjà le mérite d’être fonctionnel ^^