Nuxt.js SSR 和静态 301 重定向一个特定的生成路由

时间:2021-01-05 14:47:31

标签: express vue.js redirect nuxt.js server-side-rendering

我有一个使用 express 的 nuxt.js 应用程序,即 301 重定向添加斜杠。所有其他路由(生成与否)都不会这样做。我需要做到这一点,所以没有路由重定向。一旦 SPA 接管,路由器就不会这样做。

如果重要,路线 /units/(导航到 /units 时)。这仅在初始页面加载时发生。

请注意,没有 trailingSlash 选项或类似的选项,因此使用默认值(未定义)。我已经尝试过这种配置,但我不想要没有 404 斜线的路由。

另一件需要注意的事情,在 netlify 上静态托管会删除重定向。我意识到这是因为服务器配置。但是,我的目标也是从开发环境中删除重定向(例如,运行 nuxt)。

在这一点上,即使是寻找去处的线索也会非常有帮助!

这是缩写的nuxt配置:

  {
    dir: {
      pages: "pages"
    },
    generate: {
      routes: async () => {
        // logic to create routes
      },
      exclude: []
    },
    ignore: [
      // ignored pages
    ],
    server: {
      port: process.env.NUXT_PORT || 4000,
      host: process.env.NUXT_HOST || "localhost"
    },
    env: {
      // env vars
    },
    ssr: true,
    head: {
      // ...
      script: [
        {
          src: `https://polyfill.io/v3/polyfill.min.js?unknown=polyfill&features=${ features }`,
          async: true,
          crossorigin: "anonymous",
          body: true
        }
      ]
    },
    css: [
      // ...
    ],
    plugins: [
      // ...
    ],
    buildModules: [
      "@nuxtjs/dotenv"
    ],
    modules: [
      "@nuxtjs/axios",
      ["vue-wait/nuxt", { useVuex: true }],
      "@nuxtjs/sitemap"
    ],
    axios: {},
    serverMiddleware: [],
    build: {
      babel: {
        babelrc: false
      },
      corejs: 3,
      shouldPreload: (file, type) => {
        return ["script", "style", "font"].includes(type)
      },
      extend(config, ctx) {
        // ...
        config.node = {
          fs: "empty",
          tls: "empty"
        }
        // ...
      },
      transpile: [
        // ...
      ]
    },
    hooks: {
      nuxt: {
        ready(nuxt) {
          logger.debug(`nuxt:ready`)
        }
      },
      generate: {
        before(generator, generateOptions) {
          logger.debug(`generate:before`)
        }
      },
      render: {
        resourcesLoaded(resources) {
          logger.debug(`render:resourcesLoaded`)
        },
        route(url, result, { params }) {
          logger.debug(`render:route ${ url }`)
          // actual promise returned not relevant
          return Promise.resolve()
        }
      },
      build: {
        before(nuxt, buildOptions) {
          logger.debug(`build:before`)
          // actual promise returned not relevant
          return Promise.resolve()
        }
      }
    }
  }

编辑:

如果我按照以下规则尝试使用 @nuxt/redirect-module,我会得到无限重定向。

  redirect: [
    { from: "^/units/$", to: "/units" }
  ],

1 个答案:

答案 0 :(得分:0)

您是否尝试在 nuxt 配置中添加以下内容以及重定向规则:

router: {
    trailingSlash: true
  }