2012-03-27 98 views
1

我打算在Meta上问这个问题,但我认为这是一个足够普遍的问题,而不是在这里确保一个地方。将永久链接存储在数据库或建筑物中

我很想知道您在网站中管理永久链接的一些方法,特别是通过可随时间变化的数据构建的永久链接。

StackOverflow就是一个很好的例子,其中问题的URL部分由问题标题组成。 没有发布哑弹问题来测试我不确定问题的链接是否更改,如果问题的标题发生变化。我的猜测是,它不会,如果它确实,规范可能会保留到原始网址。

更改标题上因此不会更改URL

鉴于视情况是常见的做法来存储不服帖的永久链接在你的数据库?如果是这样,你会存储多少永久链接?

我问后者,因为在SO上下文中只有一部分URL是可变的,这就是问题标题。因此,我们应该只存储已清理过的标题,并根据我们在帖子中提供的静态信息构建剩余的标题,还是应该存储包括控制器名称和Id(等)在内的整个网址?

回答

3

我认为将永久链接存储在数据库中比较常见。空间是廉价和字符串解析函数可以是昂贵的(使一个问题标题HTTP友好几千次在成千上万的问题,会吃一些处理器),你要显示的链接各一次。

至于多少存储,个人,我只会存储在数据库中的问题/文章标题的HTTP一下(连同主键),原因如下。

  1. 存储只要牵涉到操作和控制器将使它真的,真的很难重构/重命名这些东西在路上的URL的全部或部分甚至。你要么需要运行质量数据库更新或自定义URL重写等

  2. 只有存储的称号友好的版本允许你在其他地方使用它。例如,我们以这个URL为例,它可能是由@Html.ActionLink(Question.Title, "Index", new {controller = "Questions", Id = Question.Id, Slug = Question.Slug})生成的。将slug保存为一个单独的参数,您可以在其他控制器/操作调用中使用questionId和questionSlug参数,并使您的URL保持漂亮。

+0

从一切我可以告诉,因此不存储标题都没有。网址中的标题是动态的。唯一重要的是唯一的问题ID。试试吧,把HTTP:// HTTP://stackoverflow.com/questions/9887331/askjdkasjdf,你会看到,它仍然需要你回到这里。 – 2012-04-16 10:26:22

+0

@AndrewFinnell - 这仅仅意味着他们没有使用标题来实际检索问题,只有问题ID。但是,当生成链接放在页面上时,我会打赌$$$,他们将问题标题和slu storing存储在数据库中。 WordPress的做同样的事情(wp_post表) – Tommy 2012-04-16 13:04:37

+0

我认为你是对的@汤米。如果您从网址中忽略标题,则会将其重定向到标题版本,这可能与问题的实际标题不同。 – 2012-04-17 12:43:30

3

你通常想要的是一些标识符,用于唯一标识要链接到的数据项(在SO中就是这个问题)。如何构建您的网址更多的是您认为自己能够长期支持的内容以及如何向读者传达更多信息。

如果你看看SO URLs,你注意到他们把唯一标识符放在开始处(数字/ questions /后面),这足以解决问题(尝试在URL的其余部分放入垃圾,它仍然会重定向到你的问题)。因此,最终的标题只是用户的眼睛,并没有真正用于解决问题。