Backbone.js使路由器seo友好

Backbone.js使路由器seo友好,backbone.js,url-rewriting,seo,single-page-application,Backbone.js,Url Rewriting,Seo,Single Page Application,我不熟悉backbone.js,所以这可能是一个简单的问题 路由器似乎使用语义上合理的URL,但它们对用户不是很友好 在我看到的示例中,他们使用: local.com/post/id/1 但在wordpress中,我会选择将其改写为: local.com/2012-11-03-backbone-js-router-question.html 这将通过一个大的重写表运行,并转换到正确的控制器/操作。我不想把路由器暴露给用户太显眼 我最后一次申请这个问题是考虑到电子商务: cms页面local.c

我不熟悉backbone.js,所以这可能是一个简单的问题

路由器似乎使用语义上合理的URL,但它们对用户不是很友好

在我看到的示例中,他们使用:

local.com/post/id/1

但在wordpress中,我会选择将其改写为:

local.com/2012-11-03-backbone-js-router-question.html

这将通过一个大的重写表运行,并转换到正确的控制器/操作。我不想把路由器暴露给用户太显眼

我最后一次申请这个问题是考虑到电子商务:

  • cms页面local.com/about-us.html
  • 产品页面local.com/blue-tooth-hedset.html
  • 分类页面local.com/phones.html
  • 通过分类页面购买产品local.com/phones/blue-tooth-hedset.html
所以我的问题是,在使用backbone.js时,如何获得漂亮的URL?

我对选项的想法是:

  • 你不会得到seo友好的URL
  • 你有一张巨大的地图,它必须放在客户机上:(
  • 每次您要更改url时,都会有一个快速的ajax查找程序来查找漂亮的url,您需要等待漂亮的url返回,然后才能启动状态
  • 节的前缀是一个字母ie local.com/p/product-name.html,p实际上用于区分哪个路由器,另一个可能是c

  • 主干路由几乎可以是任何内容。关于电子商务,您只需要使用冗长的URL:

    <category>/<product-name>
    television/samsung-i178
    
    然后在您的服务器数据库上,您只需通过产品prettyurl获取数据库,比如
    SELECT*FROM product WHERE prettyurl=$prettyurl
    (或者类似的东西,我已经很久没有使用mySQL了)

    这样,您不必在客户端保留地图,只需使用服务器提供的漂亮url即可获取完整的产品

    因此,当您在收藏中调用
    fetch
    时,服务器应返回给您:

    {
      id: 1,
      name: "Product XYZ",
      prettyUrl: "product-xyz"
    },
    {
      id: 2,
      name: "Mac Book Pro",
      prettyUrl: "mac-book-pro"
    }
    

    这样,每个漂亮的url都是用他的模型管理的,而不是在路由器中。这绝对是管理这些url的方法。这就是Wordpress或Drupal的主要方式。只有他们在后端才这样做。

    只有HTML5解决方案允许您在主干内保持url漂亮

    使用pushState集初始化Backbone.history。

    注意:

    If your application is not being served from the root url / of your domain, be sure to tell
    History where the root really is, as an option:
    Backbone.history.start({pushState: true, root: "/public/search/"})
    
    然后调用history.com,如下所示导航:

    navigateToTodo () {
        Backbone.history.navigate('/todos/' + this.model.toJSON().id, {trigger: true});
        return this;
    },
    
    或者在整个应用程序中使用传统的href链接

    此处的示例和说明:

    IE的回退:

    编辑:因此,经过一段时间的思考,现在我想我理解了你的问题。你想要的与主干无关,而是转换如下文本:

    "Marissa Mayer can't stop acquiring things" to this "marissa-mayer-can-t-stop-acquiring..."
    
    **你的问题是错误的,因为你以为主干是为你做的,但事实并非如此。 所以答案是: 你需要的是Urlify(还有其他的,但在我的经验中不是很好)


    -我将保留旧的答案,因为它似乎帮助了搜索此内容的人-

    我试图改进我的问题,因为你的答案避开了我真正关心的问题。此外,我对搜索引擎优化的关注程度并不像看上去的那么高。我不应该公开路由器/操作/id,我希望不同的路由器/操作看起来像是一行程序根url的ff。我还不关心为后备站点提供服务,这更像是一个似是而非的实验。@AKnox刚刚编辑了答案,以帮助您添加内容。希望这对来自谷歌的人有所帮助,我发现它解决了这个后备问题,而不会在开发过程中引入开销。原则是他们呈现web每X天分页并缓存静态版本(价格随着X的下降而上升)。您只需在web服务器上添加一些配置行,即可将爬虫重定向到此静态缓存。这并不昂贵,缓存50000页的费用约为30美元/月。我认为,如果您在项目中有时间分配给ASP.NET MVC,您甚至可以很容易地使用ASP.NET MVC执行类似的操作。我还没有实际测试过这一点然而,它看起来是一种很好的客户端实现方式。就我个人而言,我认为它有助于项目的顺利启动(一次加载整个应用程序并在本地路由可能是可以接受的)。如果项目规模扩大,我可能会选择服务器路由,并将主干应用程序拆分为不同的html/js部分。更多信息:您最终实现了吗?我实现了,它对我来说非常有吸引力。我建议您接受答案,因为我发现这是实现您要求的最简洁的方式:)这并不是真的涉及到这个问题的核心question@AKnow我编辑了我的答案,看一看,因为我相信它现在回答了你的问题。
    "Marissa Mayer can't stop acquiring things" to this "marissa-mayer-can-t-stop-acquiring..."