所以我们有这个" bloggish"我们正在构建better URL scheme
的网站。基本思路是将网址转换为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
显示完全不相关的帖子。
显而易见的解决方案是在编辑标题时重新创建slug。但是我们如何处理用户bookmarks/google tracking/SEO crawling
?我们可以做一个301 redirect
,但保持URL slug更改的整个历史记录并重定向它们很快就会变得无法管理。
另外,我更喜欢在应用程序中保留路由/重写/重定向,而不是动态定制.htaccess或其他东西。原因是,如果它在应用程序中并且出现问题,只有一些用户会遇到问题,但我们都知道当.htaccess
之类的文件发生火灾时会发生什么!
有没有人有管理此类情景的见解/经验?任何意见都非常欢迎!
答案 0 :(得分:1)
我假设页面是基于URL动态创建的,特别是id。在这种情况下,为什么不将页面ID作为自己的段,即
的http:///交/读取/ 1 /你好世界
然后你可以允许http:/// post / read / 1 / another-hello-world显示相同的页面,或者让它让路由器检查id是否与标题匹配,如果不匹配,它会重定向到正确的URL。
如果每个错误的标题重定向到正确的网址,那么您就不必保留更改历史记录。
除非它是唯一的,否则不应该使用标题来说明要显示的内容,唯一ID应该是。
你也可以这样做 HTTP:///后/读/你好世界-1 通过将“hello-world-1”转换为整数来检索“1”的方法。这意味着您必须从页面标题中过滤数字,但我个人认为它看起来更糟糕。
编辑:我怀疑这就是Stack Overflow正在做的事情 stackoverflow.com/questions/24637589/helloworld 重定向到此页面 - 他们只需要“24637589”即可知道要显示的页面和网址。
答案 1 :(得分:0)
您已经知道并且不喜欢的简短答案是,如果您希望保持当前的URL方案不变,您必须跟踪段塞更改并修改您的应用以做出相应的响应。真的没有其他方法可以保持&#34; old&#34;在以某种方式跟踪它们并将它们添加到路由表之外的活动。我建议保持&#34; old&#34;在一个专门为此目的而设计的独立商店中,您可以有效地路由它们。然后,您可以创建一些有效的路由逻辑,该逻辑表示&#34;这个slug是否被识别?是=&gt;路线,否=&gt;这是一个旧的slu ??是=&gt;路线,否=&gt; Slug没找到。