1

在我的 Koa 应用程序中,我有这种路由器:

app
    .use(router(app))
    .all('/', frontRoutes.home.index);

我的问题是:

  • mydomain.com
  • mydomain.com/
  • mydomain.com?

由同一路线路由。它可能很棒,但对于谷歌来说却不是。说它是重复的内容。所以我想将第一个和第三个重定向到第二个。就像这样:

app
    .use(router(app))
    .redirect('/\?', '/', 301)
    .redirect('', '/', 301)
    .all('/', frontRoutes.home.index);

尝试了一些正则表达式但没有成功。已经打开了 Github 问题但也没有答案:https ://github.com/alexmingoia/koa-router/issues/251 。

在此先感谢您的帮助 :)

4

1 回答 1

2

koa-router 没有问题。您可以使用普通的旧中间件来完成此操作:

// Redirects "/hello/world/" to "/hello/world"
function removeTrailingSlash () {
  return function * (next) {
    if (this.path.length > 1 && this.path.endsWith('/')) {
      this.redirect(this.path.slice(0, this.path.length - 1))
      return
    }
    yield * next
  }
}

// Redirects "/hello/world?" to "/hello/world"
function removeQMark () {
  return function * (next) {
    if (this.path.search === '?') {
      this.redirect(this.path)
      return
    }
    yield * next
  }
}

// Middleware

app.use(removeTrailingSlash())
app.use(removeQMark())
app.use(router(app))

// Routes

app
  .all('/', frontRoutes.home.index)

app.listen(3000)
于 2016-03-22T19:44:23.100 回答