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 quefr/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!