2016-03-21 1 views
1

В моем приложении Коа, у меня есть такой маршрутизатор:Как управлять URL-адресом с или без? и/

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

Моя проблема заключается в том, что:

  • mydomain.com
  • mydomain.com/
  • MYDOMAIN. ком?

Проложены по тому же маршруту. Это может быть здорово, но для Google это не так. Говорит, что это дублированный контент. Поэтому я хотел бы перенаправить первый и третий на второй. Как-то к этому:

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

Там нет проблемы с коа-маршрутизатором. Вы можете сделать это с простым старым промежуточным слоем:

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

Hell :) Спасибо !!! – MathKimRobin

+0

Есть небольшая ошибка, мне пришлось заменить 'this.path' на' this.originalUrl'. Но все остальное работает, еще раз спасибо! – MathKimRobin

Смежные вопросы