--- categories: [''] date: 2021-07-28T13:50:33+02:00 description: "Configurer Hugo et Nginx sous OpenBSD pour effectuer des redirections permanentes" draft: false include_toc: true show_comments: false tags: ['Hugo','OpenBSD','nginx','redirection'] title: "Hugo : Redirection permanente pour Nginx sous OpenBSD" translationKey: '' --- ## Description Comment faire une redirection permanente, appelée aussi 301, pour Hugo, avec le serveur web nginx… sous OpenBSD ?! L'article de [Romain Therrat](https://romain.therrat.fr/posts/2020/04/hugo-redirections-301/) 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 : ```toml 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 ```toml [mediaTypes."conf/nginx"] ``` ⇒ Ajoutez une sortie à générer, pour la variable **home** : ```toml [outputs] home = ["HTML", "nginx", …] ``` ⇒ Ajoutez la sortie du format adéquat pour créer le fichier de redirections pour nginx : ```toml [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 : ```cfg # 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 : ```sh 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 : ```sh $ 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 : ```sh # 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 : ```nginx 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 : ```sh # nginx -t && rcctl restart nginx ``` --- Voilà ! ## Documentations ⇒ [Hugo: URL Management: Aliases](https://gohugo.io/content-management/urls/) --- ***Enjoy-ID!
Enjoy-IT!*** ---