如何创建stackoverflow等用户友好的URL?

时间:2009-07-20 05:58:34

标签: asp.net url routing friendly-url

我想创建一个类似的url,就像创建问题时堆栈溢出一样。

示例:

Non-ajax GET/POST using jQuery (plugin?)非Ajax-GET-使用-jQuery的插件后

我对最后一部分我特别感兴趣。如何通过分隔符实现将页面标题添加到URL的影响?

这种技术叫做什么?

7 个答案:

答案 0 :(得分:14)

使用ASP.NET routing而不是在可能的情况下重写。它可用于MVC和Web窗体。路由更加灵活,在将上下文传递给处理代码,处理回发等方面做得更好。

您还可以使用IIS7 Rewrite Module在ASP.NET代码执行之前处理Web服务器级别的重写。关于如何做到这一点here有一些很好的信息。

答案 1 :(得分:6)

SO的URL重写由ASP.NET MVC中的路由引擎提供。

答案 2 :(得分:5)

这种技术称为“URL重写”。您使用'asp.net'标记了问题,因此MSDN可以帮助您: http://msdn.microsoft.com/en-us/library/ms972974.aspx

答案 3 :(得分:5)

Stackoverflow在ASP.Net MVC中编程,URL路由是MVC中包的标准部分。除了URL路由之外,它还提供了许多其他优点。因此,如果您正在构建一个新网站,并希望获得URL路由的优势以及其他优势,请尝试在MVC中进行。

但要注意,你必须学到很多东西。

答案 4 :(得分:1)

  

这种技术叫做什么?

与其他人一样,该技术被称为routing。基本上它需要你漂亮格式化的URL并将其映射到一些控制器动作。根据Jon Galloway的answer IIS 7集成了此功能。对于以前版本的IIS,您可能必须设置映射到ASP.NET运行时的通配符应用程序,并可能将您自己的HttpModule添加到应用程序的请求管道中,以便在您选择的Web框架不提供路由工具时处理路由。

  

你是如何实现的?   将页面标题添加到   url与分隔符?

您可以通过降低标题的大小并用连字符替换非字母数字字符来实现此目的。有时这个位被称为slug。您可能希望保持slug长度不变,这样就不会遇到URL length limit问题。您还可以选择在几个地方生成slu ::

  • 提交标题时,将slug与剩余的页面数据一起保存。
  • 当您生成链接到带标题的页面的页面时,或者动态生成它。

请记住,slugs不应该用于查找页面数据,这就是页面ID的用途; slug应该是可选的。您的路由规则只关心从URL中获取ID并将其提供给正确的控制器操作,同时忽略所有内容。换句话说,唯一关键的部分是问题ID。 slu is只是糖。 :)

答案 5 :(得分:0)

虽然路由显然是更好的选择,但有一些方法可以轻松地伪装它。例如,这是获取友好URL和一些SEO的简单方法:
假设您有页面:

example.aspx

即使没有做任何事情,以下网址工作:

example.aspx/some-friendly-text

您还可以合并查询数据:

example.aspx?id=1
example.aspx/some-friendly-text?id=1

如果需要,您可以使用请求PathInfo property访问该文本。

答案 6 :(得分:0)

不要忘记,通过这种类型的路由,人们可以使用您可能希望不使用的文本链接到您的页面。

我在英国报纸上看到过这么多 - 他们会发布一个带有URL的故事

newspaperdoman.co.uk/articles/1128945/dog-bites-man

然后有人会将其链接为

newspaperdoman.co.uk/articles/1128945/newspaper-in-crap-story-shocker

或其他什么。