Skip to content

theNewDynamic/hugo-module-tnd-redirects

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TND Redirects Hugo Module

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.

What are redirections?

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.

Quick setup

1. Add module to your project's imports:

# config.yaml
module:
  imports:
    - path: github.com/theNewDynamic/hugo-module-tnd-redirects

2. Add redirect output format for chosen service.

Netlify

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.

API

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

Configuration is set through the site's configurationf file's using the tnd_redirects reserved keys.

use_aliases

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

redirects

A list of custom redirect rules. See below.

Adding Custom Redirects

Though Configuration File (hardcoded)

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

Through a Returning Partial (dynamnic)

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.

Example

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 }}

theNewDynamic

This module is created, maintained and loved by theNewDynamic.