在Nuxt.js中每条路线的末尾添加一个lask

时间:2018-09-17 12:13:11

标签: vue.js nuxt.js nuxt-edge

出于搜索引擎优化的目的,我被要求在我的nuxt项目的每条路线的末尾添加一个斜线。例如myapp.com/company应该是myapp.com/company/在Nuxt中有一种干净的方法吗?

2 个答案:

答案 0 :(得分:0)

好吧,我通过在服务器端的中间件中编写重定向来找到了解决方案,因此首先我将其添加到了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/" }
]

编辑:问题仍然存在,因为应用程序链接的代码内部没有斜杠,因此机器人的索引将使用它。...我需要找到更好的解决方案。

答案 1 :(得分:0)

我也在做这个要求。我使用以下方法执行任务,但我不知道它是正确的。

两个步骤:

Nginx重写了url,即在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)
    }
  }
}

通过上面的两个步骤,完成任务。