Я пытаюсь реализовать сокращенные URL-адреса, которые перенаправляют на обычные URL-адреса, чтобы сделать их более эффективными для ввода в адресной строке.Я пытаюсь реализовать это для проекта crates.io
.
Чтобы пояснить, что я имею в виду, я бы хотел перенаправить URL-адреса следующим образом:
/c
=> /crates
/c/rand
=> /crates/rand
/c/rand/0.5.5
=> /crates/rand/0.5.5
/c/...
=> /crates/...
Ниже приведен фрагмент соответствующих длинных маршрутов, настроенных в настоящее время:
this.route('crates');
this.route('crate', { path: '/crates/:crate_id' }, function() {
this.route('download');
this.route('versions');
this.route('version', { path: '/:version_num' });
this.route('reverse-dependencies', { path: 'reverse_dependencies' });
this.route('owners');
this.route('docs');
this.route('repo');
});
Вот что я пробовал;Я попытался реализовать эти перенаправления, определив следующие дополнительные маршруты:
this.route('c');
this.route('c', { path: '/c/:crate_id' });
С этим ./routes/c.js
:
import Route from '@ember/routing/route';
export default Route.extend({
afterModel(crate, path) {
if (crate === undefined) this.transitionTo('crates');
else this.transitionTo('crate', crate, path);
},
});
Это работает только частично.Маршруты /c
и /c/rand
покрыты и работают, в то время как другие, такие как /c/rand/0.5.5
, не работают.
Я могу реализовать все возможности дочерних маршрутов, но я не думаю, что это правильноспособ сделать это.Я хотел бы предотвратить дублирование кода.
Как бы я это правильно реализовал?Можно ли перенаправить что-нибудь, начиная с /c
, на их соответствующие длинные маршруты?Я изучил документацию ember
, но не нашел решения.Я чувствую, что должен быть лучший способ, чем то, что я пробовал.Может ли кто-нибудь указать мне правильное направление?