# vuepress-plugin-redirect

VuePress has a built-in i18n system, but you must provide a default language, otherwise you will only get a 404 if you try to access / directly. However, providing a default language often means a less friendly project structure (because the files in the default language are one level lower than others), and we sometimes want our website to keep / for a more intelligent redirection (e.g. determines that the language used by the user based on navigator.language and automatically redirects to the corresponding page). vuepress-plugin-redirect is such a plugin that handles automatic redirections. Of course, its capacity is not limited to automatic redirecting of the language, because you can redirect any page to its subpages via a custom redirector.

# Installation

npm install -D vuepress-plugin-redirect

# Usage

// .vuepress/config.js
module.exports = {
  plugins: [
    [
      'vuepress-plugin-redirect',
      {
        // provide i18n redirection
        // it will automatically redirect `/foo/bar/` to `/:locale/foo/bar/` if exists
        locales: true,
      },
    ],
  ],
}

or

// .vuepress/config.js
module.exports = {
  plugins: {
    redirect: {
      redirectors: [
        // customize your redirectors
        {
          base: '/my-plugins/', // automatically redirect `/my-plugins/` to a subpage
          storage: true, // save the result of the last visit to `localStorage` for the next redirect
          alternative: [
            // provide an alternate list
            // if no page was matched, you will get a "404 not found"
            'mathjax', // equivalent to `/my-plugins/mathjax/`
            'migrate',
            'pangu',
            'redirect',
            'serve',
          ],
        },
      ],
    },
  },
}

# Configs

# locales

  • type: boolean
  • default: false

Whether to provide i18n redirection.

# redirectors

  • type: Redirector[]
  • default: []

A list of custom redirectors.

# redirector.base

  • type: string
  • default: '/'

Base URL to be redirected.

# redirector.storage

  • type: boolean | string | Storage
  • default: false

Decide how the results of the redirect are stored. If set to string, it corresponds to the key of localStorage. If it is an object, you must include the following two methods:

  • get(redirector: Redirector): string
  • set(value: string, redirector: Redirector): void

A simple storage object is provided below for your reference:

const storage = {
  get({ base }) {
    if (typeof localStorage === 'undefined') return null
    return localStorage.getItem('redirect:' + base)
  },
  set(value, { base }) {
    if (typeof localStorage === 'undefined') return
    localStorage.setItem('redirect:' + base, value)
  },
}

# redirector.alternative

  • type: string | string[] | ((rel: string) => string | string[])
  • default: undefined

An alternate list of redirects. A requested URL will be devided into two parts, base and rel, and alternative will be inserted between them. If it is a function, rel will be passed as a parameter. All the results obtained will be tried in sequence, and the first existing page will be taken for redirection.