代码之家  ›  专栏  ›  技术社区  ›  Cameron

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

  •  0
  • Cameron  · 技术社区  · 7 年前

    具体地说,我有一个网址到一个网页上的网站,但网址有点长和丑陋。

    可能看起来有点像这样

    mywebsite.com/all-products/hats/golf-caps

    但是,我的营销团队觉得这个URL太长了,希望我添加一个“美化”的URL,如下所示:

    mywebsite.com/golf-caps

    但它真正能做的就是重定向到原来的路径。

    有没有办法做到这一点ember.js?或者这是一种不好的做法?理想情况下,我只需要修改路由器文件,而不是在应用程序中创建一个全新的路由来执行重定向。

    0 回复  |  直到 7 年前
        1
  •  1
  •   jrjohnson    7 年前

    如果你能控制服务器,我会在那里处理。很高兴能把正确的 308 permanent redirect 所以搜索索引排成一行,大多数后端路由解决方案似乎都有内置的概念。

        2
  •  0
  •   jelhan    7 年前

    据我所知,你需要用 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 因为这在任何情况下都不会呈现。

    如果您有多个重定向,您可能需要考虑添加一个 wild-card route

        3
  •  0
  •   Patrick Berkeley    6 年前

    恩伯有 resetNamespace ( guides ).

    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.,

    例如 golf-caps “子类别”可以是两个“类别”。如果有人直接导航到 mysite.com/golf-caps 你的服务器无法知道是哪个 高尔夫球帽 为了显示,那些来自 hats accessories .

    唯一能把它们分解的方法就是你所有的子类别都是独一无二的。在这种情况下,那么是的,只需去掉类别级别。

    假设你还需要这个类别,我想你可以摆脱掉 all-products 在您的URL中:

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