2016-03-21 21 views
1

In meiner Koa app, habe ich diese Art von Router:Wie man URL mit oder ohne verwaltet? und/

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

Mein Problem ist, dass:

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

Sind auf dem gleichen Weg geroutet. Es könnte toll sein, aber für Google ist es nicht. Sagt, dass es sich um doppelten Inhalt handelt. Also möchte ich das erste und dritte auf das zweite umleiten. Wie etwas zu diesem:

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

Haben einige regexp ohne Erfolg versucht. Bereits ein Github-Problem, aber auch ohne Antwort: https://github.com/alexmingoia/koa-router/issues/251.

Vielen Dank im Voraus für Ihre Hilfe :)

+0

Es scheint, dass [ 'Pfad zu regexp'] (https://github.com/pillarjs/path-to-regexp) verankert den Wert, den Sie als Pass ein Muster standardmäßig. Probieren Sie "" aus. So etwas wie '.redirect ('\ ??', '/', 301)'. –

+0

Do scheint nicht den Fehler zu lösen ... Habe versucht, funktioniert nicht :(Thansk für Ihren Versuch, mir zu helfen – MathKimRobin

Antwort

2

Es gibt kein Problem mit Koa-Router. Sie können dies mit einfacher alter Middleware erreichen:

// 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

Hölle :) Danke !!! – MathKimRobin

+0

Es gibt einen kleinen Fehler, ich musste 'this.path' durch' this.originalUrl' ersetzen. Aber der ganze Rest funktioniert, danke nochmal! – MathKimRobin