Jekyll Redirects für alle Collection-Typen

In einem vorherigen Artikel habe ich bereits über Redirects mit Jekyll geschrieben, habe aber gestern ein Update für das vorgestellte .htaccess File gebaut, was nochmal eleganter ist als die letzte Lösung.

Hintergrund war ein Update der Webseite von Kimai 2 die ich mittels Jekyll baue und die mehrere Collections verwendet. Das ursprüngliche Skript berücksichtigte nur „pages“ und „posts“, mit dem folgenden Update werden nun Redirects für alle Collections erstellt:

---
layout: none
---
{%- for collection in site.collections -%}
{%- for page in site[collection.label] -%}
{%- if page.redirect_from != nil -%}
{%- for redirect in page.redirect_from -%}
rewrite ^{{ redirect }}$ {% if page.permalink == nil %}{{ page.url }}{% else %}{{ page.permalink }}{% endif %} permanent;
{% endfor %}
{%- endif -%}
{%- endfor -%}
{%- endfor -%}

Kurz und knackig:

  • die äußere Schleife durchläuft alle Collections
  • die zweite Schleife durchläuft alle „Seiten“ bzw. „Elemente“ der jeweiligen Collection
  • die innere Schleife durchläuft alle angegebenen Redirects für die jeweilige Seite und erzeugt die notwendigen nginx rewrite Regeln

Ein Beispiel dieser .htaccess Variante kann man hier einsehen.