[英]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
到http://<site>/post/read/hello-world
为了确保该网址是唯一的,我们计划将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 slug更改的整个历史记录,然后像这样重定向它们会很快变得难以管理。
同样,我真的更希望将路由/重写/重定向保留在应用程序内,而不是动态自定义.htaccess之类的东西。 原因是,如果它存在于应用程序中并且出了问题,那么只有部分用户会遇到问题,但是我们都知道当.htaccess
文件着火时会发生什么!
有没有人有任何洞察力/经验来管理这种情况? 任何输入都非常欢迎!
我假设页面是根据URL(尤其是id)动态创建的。 在这种情况下,为什么不将页面ID作为自己的细分,即
http:/// post / read / 1 / hello-world
然后,您可以允许http:/// post / read / 1 / another-hello-world显示同一页面,也可以进行显示,以便路由器检查ID是否与标题匹配,如果不匹配,则重定向正确的URL。
如果每个错误的标题都重定向到正确的URL,则您不必保留更改历史记录。
除非它是唯一的,否则不应使用标题来表示要显示的内容,唯一的ID应该是。
您还可以通过将“ hello-world-1”转换为整数来检索“ 1”来执行http:/// post / read / hello-world-1方法。 那意味着您将不得不从页面标题中过滤数字,但是我个人认为它看起来更乱。
编辑:我怀疑这是Stack Overflow在做什么stackoverflow.com/questions/24637589/helloworld重定向到此页面-他们只需要“ 24637589”即可知道要显示的页面和URL。
简短的答案是您已经知道并且不会喜欢的答案,如果您希望保持当前的URL方案不变,那么您就必须跟踪消息的更改并修改应用程序以做出相应的响应。 除了以某种方式跟踪“旧”块并将其添加到路由表之外,实际上没有其他方法可以使“旧”块保持活动状态。 我建议将“旧”块塞放在专门为此目的设计的单独商店中,以便您可以高效地进行路由。 然后,您可以创建某种有效的路由逻辑,该逻辑说:“是否可以识别此子弹?是=>路由,否=>这是旧的子弹吗?是=>路由,否=>找不到子弹。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.