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

关于ASP.netmvc内容系统中slug的几个问题

  •  1
  • mare  · 技术社区  · 15 年前

    1) 使标题和Slug独立

    我应该允许用户分别输入Title和Slug吗?这是我第一次吃的。我还有一个选项,如果用户没有输入Slug,它是从标题派生的。如果两者都输入,则Slug字段优先。

    然后,我切换到仅标题字段,并从标题派生Slug。当我这么做的时候,我发现现在我必须改变所有允许用户输入slug的表单。这样做还可以防止用户更改Slug-他们可以更改标题,但对Slug没有影响。你可以把它想象成鼻涕虫是唯一的身份证。

    3) 现在我再次考虑允许用户更改slug

    第三个选项的最大问题是,如果我使用Slug作为id,那么当Slug发生变化时,我需要到处更新引用。或者维护一个包含某种Slug历史的表。

    如果有人有一个样本数据库设计,如果你在这里分享它将不胜感激。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Zhaph - Ben Duguid    15 年前

    我刚刚和一个客户一起经历了这一切,整理了关于url的规则,等等。

    你的slug应该至少与标题稍微无关,如果只是为了确保你可以去掉标准的“停止词”—大多数SEO会建议页面路径尽可能丰富关键字,这样页面标题:

    亲爱的:我们会比撒切尔更深入更强硬

    alistair-darling-cut-deeper-margaret-thatcher

    但如果可能的话,在作者创建文章时,您应该尽可能地自动化它,这样当它们从标题字段中移出时,您就可以用一个字符串填充Slug/Name/Path字段,该字符串删除了所有符号,(理想情况下)删除了商定的停止词列表,并用连字符替换空格,所以这个标题中的自动段塞可能是:

    但是你需要给作者更多的调整能力。

    我们还规定,这种自动化只会在作者创建文章时发生,因此后续编辑不会自动更改slug,以确保我们不会遭受外部链接损坏(我们使用的CMS管理所有内部链接)。

    唯一一次作者真正应该改变的鼻涕虫将是如果他们发表了一个打字错误,或一些诽谤。

        2
  •  2
  •   Carl G    12 年前

    301 Moved Permanently 当弹头与当前弹头不匹配时。例如,如果 /product/42/black-bucket/ 是现在 /product/42/shiny-black-bucket/

        3
  •  1
  •   WestDiscGolf    15 年前

    就我个人而言,我建议让用户编辑页面的标题和记录的其他内容。一旦他们做到了这一点,你就可以从标题(或任何你觉得像的东西)中得到slug。如果他们更改了标题,那么slug可以更改,但是您可以保留与同一页相关联的旧slug的记录。如果有人带着一个旧的slug来到这个站点,那么你可以向他们发送301响应并将他们重定向到新页面。这将是通过一个拦截页面处理您的路由。

    另一个问题是,如果他们改变了标题,肯定是一个新的页面,新的内容和新的slug?

        4
  •  0
  •   David Glenn    15 年前

    当页面处于草稿状态时,只允许用户编辑标题或slug如何。当页面发布时,标题和slug将成为永久性的。

    或者像@WestDiscGolf所说的那样,记录所有的旧弹头并发送重定向。

    推荐文章