# vuepress-plugin-redirect

VuePress 内置了多语言系统,但你必须提供一个默认语言,否则直接访问 / 将只能得到 404。然而,提供默认语言往往又意味着不那么友好的项目结构(因为默认语言下的文件会比其他语言低一级),我们有时也希望网站保留 / 用于更加智能地重定向(比如根据 navigator.language 判断用户所使用的语言自动定向到相关页面)。vuepress-plugin-redirect 就是这样一个自动重定向的插件。当然,它所能做的事情不止是自动匹配语言,你可以通过定制你的重定向器实现任何页面到子页面的重定向。

# 安装

npm install -D vuepress-plugin-redirect

# 使用

// .vuepress/config.js
module.exports = {
  plugins: [
    [
      'redirect',
      {
        // 提供多语言重定向功能
        // 它会自动从 `/foo/bar/` 定向到 `/:locale/foo/bar/`,如果对应的页面存在
        locales: true,
      },
    ],
  ],
}

或者

// .vuepress/config.js
module.exports = {
  plugins: {
    redirect: {
      redirectors: [
        // 定制化重定向
        {
          base: '/plugins/', // 将 `/my-plugins/` 自动重定向到某个子页面
          storage: true, // 保存最后一次访问的结果到 `localStorage`,供下次重定向使用
          alternative: [
            // 提供一个备选列表,如果都找不到就只能 404 Not Found 喽
            'mathjax', // 相当于 `/my-plugins/mathjax/`
            'migrate',
            'redirect',
            'serve',
          ],
        },
      ],
    },
  },
}

# 配置项

# locales

  • 类型: boolean
  • 默认值: false

是否提供多语言重定向功能。

# redirectors

  • 类型: Redirector[]
  • 默认值: []

自定义的重定向器列表。

# redirector.base

  • 类型: string
  • 默认值: '/'

要进行重定向的根地址。

# redirector.storage

  • 类型: boolean | string | Storage
  • 默认值: false

决定重定向的结果被以何种方式存储。如果设为 string,则对应 localStorage 的键值。如果是对象,则必须包含下面两个方法:

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

下面提供一个简单的 storage 对象以供大家参考:

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

  • 类型: string | string[] | ((rel: string) => string | string[])
  • 默认值: undefined

重定向的备选列表。被请求的网址将被分为 baserel 两个部分,alternative 将插入它们之间。如果是一个函数,将传入 rel 作为参数。得到的所有结果将被一一尝试,取第一个存在的页面进行重定向。