2016-03-21 67 views
1

在我興亞應用程序,我已經路由器的這種:如何使用或不使用URL?和/

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

在此先感謝您的幫助:)

+0

似乎['路徑到regexp'(https://github.com/pillarjs/path-to-regexp)錨你爲合格值:你可以用普通的舊中間件實現這一目標一個默認模式。試試''\ ??''表達式。類似'.redirect('\ ??','/',301)'。 –

+0

似乎並沒有解決這個錯誤...已經嘗試過,不工作:(Thansk爲你的嘗試幫助我 – MathKimRobin

回答

2

koa路由器沒有問題。

// 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) 
+0

地獄:)謝謝! – MathKimRobin

+0

有一個小錯誤,我不得不用'this.originalUrl'替換'this.path'。但所有其他的作品,再次感謝! – MathKimRobin