人性化的唯一网址

时间:2014-07-08 16:59:02

标签: java php url-rewriting url-routing url-redirection

所以我们有这个" 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之类的文件发生火灾时会发生什么!

有没有人有管理此类情景的见解/经验?任何意见都非常欢迎!

2 个答案:

答案 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没找到。