人类友好的唯一URL


Human friendly Unique URL

所以我们有这个"博客"网站,我们正在建立一个better URL scheme。基本思想是将url转换为human and SEO friendly structure。我有一个基于帖子标题生成URL slug的函数。

现在数据库中的记录看起来是这样的:

    post_id         post_title              post_url_slug
--------------------------------------------------------------       
    1               Hello World             hello-world
    2               Another Post            another-post

现在我们可以修改

http://<site>/post.cgi?action=read&id=1

to http://<site>/post/read/hello-world

为了确保url是唯一的,我们计划在其后面附加post_id

现在是http://<site>/post/read/hello-world

变为http://<site>/post/read/hello-world-1

所有这些都工作得很好。我的主要问题是,如果博客发帖人编辑了他的标题,我们该如何处理?我们不希望hello-world-1显示一个完全不相关的帖子。

最明显的解决方案是在编辑标题时重新创建这个段。但是我们如何处理用户bookmarks/google tracking/SEO crawling呢?我们可以做一个301 redirect,但是保留URL段更改的整个历史记录并重定向它们会很快变得难以管理。

另外,我真的更喜欢在应用程序中保留路由/重写/重定向,而不是在飞行中自定义。htaccess或其他东西。原因是,如果它在应用程序中出现问题,只有一些用户会遇到问题,但我们都知道当像.htaccess这样的文件着火时会发生什么!

有没有人有管理这种情况的洞察力/经验?任何输入是非常欢迎的!

我假设页面是基于URL(特别是id)动态创建的。在这种情况下,为什么不将页面id作为自己的段,即

http:///post/read/1/hello-world

你可以允许http:///post/read/1/another-hello-world显示相同的页面,或者让你的路由器检查id是否与标题匹配,如果不匹配,它会重定向到正确的URL。

如果每个错误的标题都重定向到正确的URL,那么您就不必保留更改历史记录了。

除非它是唯一的,否则标题不应该用来说明要显示什么内容,而应该是唯一的id。

你也可以做http:///post/read/hello-world-1方法通过将"hello-world-1"转换为整数来检索"1"。这就意味着你必须从页面标题中过滤数字,然而,我个人认为它看起来更混乱的URL。

编辑:我怀疑这就是Stack Overflow正在做的事情stackoverflow.com/questions/24637589/helloworld重定向到这个页面-他们只需要"24637589"知道要显示哪个页面和url

你已经知道但不会喜欢的简短答案是,如果你想保持当前的URL方案不变,你必须跟踪段标记的变化并修改你的应用程序以做出相应的响应。除了以某种方式跟踪它们并将它们添加到您的路由表中之外,真的没有其他方法可以让"老"鼻涕虫保持活跃。我建议把"老"鼻涕虫放在专门为这个目的设计的单独的仓库里,这样你就可以有效地运送它们。然后,您可以创建一些有效的路由逻辑,它说"这个鼻涕虫被识别了吗?"是=>路由,否=>是老鼻涕虫吗?是=>路由,否=>未找到弹头