This module helps create and maintain redirections for your Hugo project using Hugo's aliases params or a set of custom redirect rules added either via configutation or a dynamic returning partial on the project's level.
It supports beautiful Netlify but should scope out to more services in the future.
We call redirection anything that takes an initial URL to match (the origin), and redirects to another destination, (the target). The module processes a list of rules, defined by the user through either the project's configuration file or a returning partials and make sure their correctly processed by a given hosting service.
# config.yaml
module:
imports:
- path: github.com/theNewDynamic/hugo-module-tnd-redirects
Set configuration so Hugo produces the redirections file at the root of the site (on the Homepage)
# config.yaml
outputs:
homepage:
- HTML
- tnd_redirects_netlify
# + any other outputs needed on the homepage.
OR
# content/_index.md
title: Homepage
outputs:
- HTML
- tnd_redirects_netlify
# + any other outputs needed on the homepage.
Any given rule properties are defined by the following keys. Those marked by an * are mandatory
- origin*: the URL to match
- target*: the destination
- code: the status code (default: 301)
- force: Is it a force redirect? (default: false)
- country: the country if redirection is subject to a country code
- language: the language if redirection is subject to a language code
- role: the user role if redirection is subject to a user role
Configuration is set through the site's configurationf file's using the tnd_redirects
reserved keys.
Should the module build redirect rules for entries using Hugo's reserved aliases
Front Matter key.
If so, you should disable Hugo's own Aliases feature with disableAliases: true
# config.yaml
disableAliases: true
params:
tnd_redirects:
use_aliases: true
A list of custom redirect rules. See below.
User can add a list of redirects through the site's configuration file. Each rule can use the API's available keys.
# config.yaml
params:
tnd_redirects:
rules:
- origin: /something
target: /something-else
- origin: /contact
target: /fr/contact
language: fr
In order to add dynamic redirect rules built by Hugo, user can create a dedicated returning partial in the project at layouts/partials/tnd-redirects/AddRules.html
.
The partial should return a slice of maps which uses the API's available keys.
Following code add redirect rules for some blog posts so Canadian visitor are redirected to a dedicated page.
{{/*
AddRedirects
In this project, every posts with `.Params.redirect_ca` set to true should redirect
canadian visitors to a dedicated information page.
@author @user
@context Any (.)
@access public
*/}}
{{/* We create a returning variable */}}
{{ $redirs := slice }}
{{ $posts := where site.RegularPages "Params.redirect_ca" "==" true }}
{{ range $posts }}
{{/* We create a map for a rule with origin, target and country key*/}}
{{ $rule := dict "origin" .RelPermalink "target" "/canadian-regulation" "country" "ca" }}
{{/* We add the rule's map to the $redirs slice */}}
{{ $redirs = $redirs | append $rule }}
{{ end }}
{{ return $redirs }}
This module is created, maintained and loved by theNewDynamic.