在Nuxt.js每个路线的末尾添加slask /(Add a slask / at the end

2019-09-26 03:54发布

对于SEO的目的,我已经要求我的nuxt项目的每一个路径的末尾添加斜线。 例如myapp.com/company应该myapp.com/company/有没有干净的方式做,在Nuxt?

Answer 1:

确定我找到了解决办法通过书面方式在服务器端上中间件重定向,所以第i个加至nuxt.config.js此:

serverMiddleware: ["~/servermiddleware/seo.js"],

然后,我创建这个文件/servermiddleware/seo.js:

const redirects = require('../301.json');
module.exports = function (req, res, next) {
  const redirect = redirects.find(r => r.from === req.url);
  if (redirect) {
    console.log(`redirect: ${redirect.from} => ${redirect.to}`);
    res.writeHead(301, { Location: redirect.to });
    res.end();
  } else {
    next();
  }
}

最后我写我要在根文件夹301.json的重定向:

[
  { "from": "/company", "to": "/company/" }
]

编辑:问题留在这里,因为里面的应用链接代码保持不斜线使机器人的指数化将使用它....我需要找到一个更好的解决方案。



Answer 2:

我做的要求了。 我做了下面的方法,我不知道这是正确的任务。

两个步骤:

Nginx的重写URL,即的“/”斜线添加到URL的末尾,该网址是不是以斜线结束。 在这种情况下,HTTP请求被发送到Web服务器。

在另一种情况下,如果请求(或链接路由)在前端路由,该请求不发送HTTP请求到Web服务器。 然后添加一个名为addSlash.js这样的中间件文件:

function isThereSlashEnd(path) {
  let isSlash = true
  if (path) {
    let length = path.length
    isSlash = path[length-1] == '/' ? true : false
    console.log('??? path222: ', path, path[length-1], isSlash)
  }
  return isSlash
}
export default function({ req, store, route, redirect }) {

  /**
   * Add slash of '/' at the end of url
   */
  let isSlash = isThereSlashEnd(route.fullPath)
  console.log('??? path111: ', isSlash, route.fullPath, process.client)
  if (!isSlash) {
    if (process.client) {
      window.location.href = route.fullPath + '/'
      console.log('??? path: ', isSlash, route.fullPath, process.client, window.location)
    }
  }
}

通过以上两个步骤,完成这项任务。



文章来源: Add a slask / at the end of every routes in Nuxt.js