%

Hugo : Redirection permanente pour Nginx sous OpenBSD

Article publié, le et modifié le
2 minutes de lecture

Cet article contient 401 mots.
Source brute de l'article :
Commit version : 5ed7c38

Description

Comment faire une redirection permanente, appelée aussi 301, pour Hugo, avec le serveur web nginx… sous OpenBSD ?!

L’article de Romain Therrat donne les grandes lignes… sauf que sous OpenBSD, ça ne fonctionne pas !

Je reprends les grands principes ci-dessous, adapté à OpenBSD :

Configuration

Hugo

Le principe est l’utilisation des alias d’URL.

En partant du principe de l’utilisation du format toml, ouvrez le fichier que vous voulez rediriger et dans son entête, ajoutez :

aliases = [/ancienne/URL/de/publication/fichier/]

Si votre format de fichier de configuration est autre, adaptez !


Puis modifier le fichier de configuration de Hugo, pour ajouter les directives suivantes :

⇒ Ajoutez un type de media

[mediaTypes."conf/nginx"]

⇒ Ajoutez une sortie à générer, pour la variable home :

[outputs]
    home = ["HTML", "nginx", ]

⇒ Ajoutez la sortie du format adéquat pour créer le fichier de redirections pour nginx :

[outputFormats.nginx]
    baseName = "redirections.conf"
	isPlainText = true
	mediatype = "conf/nginx"
	notAlternative = true
	path = "nginx-config"    

Puis, créer le layout nécessaire : layout/index.nginx, tel que :

# Nginx redirect
{{-  range $p := site.Pages -}}
    {{- range .Aliases }}
rewrite ^{{  . }}$ {{ $p.RelPermalink }} permanent;{{ end }}
{{- end }}

  • Si votre site est monolingue, hugo générera dans le sous-répertoire nginx-config/redirections.conf
  • Si votre site est multilingues, hugo générera chaque fichier redirections.conf dans chaque sous-répertoire de langue, tel que fr/nginx-config/redirections.conf.

Voilà, toute la configuration Hugo prête à être fonctionnelle !

nginx

La configuration présentée ci-dessous est relative à mon site multilingue… Si le votre est monolingue, adaptez !


Lorsque vous testerez la configuration, nginx se plaindra, telle que :

nginx: [emerg] open() "/var/www/htdocs/doc.huc.fr.eu.org/www/fr/nginx-conf/redirections.conf" failed (2: No such file or directory) in /etc/nginx/conf.d/domain.tld.conf:15

Et, oui le fichier existe bien, au bon endroit :

$ ls -al /var/www/htdocs/doc.huc.fr.eu.org/www/fr/nginx-config/redirections.conf 
-rw-r--r--  1 www  www  397 Jul 28 13:23 /var/www/htdocs/doc.huc.fr.eu.org/www/fr/nginx-config/redirections.conf

Copions les fichiers de redirections à la racine du répertoire de configuration de nginx :

# cp /var/www/htdocs/doc.huc.fr.eu.org/www/en/nginx-config/redirections.conf /etc/nginx/hugo-en-redirections.conf
# cp /var/www/htdocs/doc.huc.fr.eu.org/www/fr/nginx-config/redirections.conf /etc/nginx/hugo-fr-redirections.conf

Puis, avec la directive include, incluez ces fichiers de configuration dans la directive server de l’hôte virtuel relatif au domaine, tel que :

server "domain.tld" {

(…)

	include /etc/nginx/hugo-en-redirections.conf;
	include /etc/nginx/hugo-fr-redirections.conf;

(…)

    location /(en|fr)/nginx-conf/redirections.conf {
        deny all;
    }

(…)

}

Pour finir, remarquez la directive location afin d’interdire toute consultation.

Pensez à vérifier la configuration puis redémarrer le service :

# nginx -t && rcctl restart nginx

Voilà !

Documentations

Hugo: URL Management: Aliases


Enjoy-ID! Enjoy-IT!