ember.js 是否可以在routerjs文件中创建重定向规则以创建虚路由

ckx4rj1h  于 2022-11-05  发布在  其他
关注(0)|答案(3)|浏览(180)

具体地说,我有一个URL到一个网站上的一个页面,但URL有点长和丑陋。
它看起来可能有点像这样
mywebsite.com/golf-caps
但是,我的营销团队认为此URL太长,希望我添加一个“美化”URL,如下所示:
mywebsite.com/golf-caps
但它实际上只会重定向到原来的路线。
在ember.js中有没有办法做到这一点?或者这是一个糟糕的做法?理想情况下,我只需要修改路由器文件,而不是在我的应用程序中创建一个全新的路由,只是为了执行重定向。

mzmfm0qo

mzmfm0qo1#

如果你能控制服务器,我会在那里处理这个问题。能够发送正确的308 permanent redirect头是很好的,这样搜索索引就可以排队了,而且大多数后端路由解决方案似乎都有这个内置的概念。

ux6nzvsh

ux6nzvsh2#

据我所知,你需要创建一个新的路由,其中包含一个包含重定向的beforeModel()钩子。但我不认为这会增加很多复杂性。它基本上是ember generate route golf-caps,并编辑创建的app/routes/golf-caps.js以包含:

export default class GolfCapsRoute extends Route {
  beforeModel() {
    this.transitionTo('all-products/hats/golf-caps');
  }
}

您可能希望删除路线的模板app/templates/golf-caps.hbs,因为在任何情况下都不会呈现该模板。
如果您有多个重定向,您可能需要考虑添加一个通配符路由来捕获所有请求。这样可以基于多个路径的Map进行重定向,如果没有为该路径注册任何重定向,则会呈现一个未找到的页面。

sigwle7e

sigwle7e3#

Ember(引导程序)具有resetNamespace

this.route('all-products', { resetNamespace: true, path: '/' }, function() {
  this.route('categories', { resetNamespace: true, path: ':category_id' }, function() {
    this.route('subcategories', { path: ':subcategory_id' });
  });
});

我不知道resetNamespace will work two levels deep like that though. Especially since you have something meaningful in the second level, i.e.,是怎么写的。你的ember路由器需要它来知道从服务器请求哪个“类别”。
例如golf-caps 'subcategory'可能在两个'categories'中。如果有人直接导航到mysite.com/golf-caps,您的服务器将无法知道显示哪个golf-caps,来自hats的还是来自accessories的。
你能把它们分解的唯一方法是你所有的子类别都是唯一的,在这种情况下,是的,你可以去掉类别级别。
假设您仍然需要这个类别,我想您可以在URL中去掉all-products

this.route('all-products', { resetNamespace: true, path: '/' }, function() {
  this.route('categories', { path: ':category_id' }, function() {
    this.route('subcategories', { path: ':subcategory_id' });
  });
});

相关问题