【问题标题】:How do I create userfriendly urls like stackoverflow?如何创建用户友好的 url,如 stackoverflow?
【发布时间】:2010-11-12 05:18:38
【问题描述】:

我想创建与创建问题时堆栈溢出类似的 url。

例子:

Non-ajax GET/POST using jQuery (plugin?)non-ajax-get-post-using-jquery-plugin

我对我用粗体突出显示的最后一部分特别感兴趣。用分隔符在url中添加页面标题的效果如何实现?

这种技术叫什么?

【问题讨论】:

  • 首先将字符串小写...然后添加破折号...然后将其连接到 URL...
  • FWIW,堆栈溢出忽略该文本:stackoverflow.com/questions/1149454/…
  • 是的,这只是很好的 SEO。你真的只需要身份证号码。

标签: asp.net url routing friendly-url


【解决方案1】:

这种技术叫什么?

就像其他人所说的那样,该技术称为routing。基本上,它需要您格式化的 URL 并将其映射到一些控制器操作。并且根据 Jon Galloway 的answer IIS 7 已经集成了这个功能。对于以前版本的 IIS,您可能必须设置通配符应用程序映射到 ASP.NET 运行时,并且如果您选择的 Web 框架不提供路由功能,您可能需要将自己的 HttpModule 添加到应用程序的请求管道中以处理路由。

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

您可以通过将标题小写并用连字符替换非字母数字字符来完成此操作。有时这个位被称为蛞蝓。您可能还想降低 slug 的长度,以免遇到URL length limit 问题。您还可以选择在几个地方生成 slug:

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

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

【讨论】:

    【解决方案2】:

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

    我在英国报纸上看到过很多这样的事情——他们会发布一个带有类似

    的 URL 的故事

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

    然后有人会链接到它

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

    或其他。

    【讨论】:

      【解决方案3】:

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

      example.aspx
      

      即使不做任何事情,以下 URL 也可以工作:

      example.aspx/some-friendly-text
      

      还可以组合查询数据:

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

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

      【讨论】:

        【解决方案4】:

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

        请注意,您将不得不学习很多东西。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 默认情况下,ASP.NET 路由不能与 IIS6 一起使用,对吗?据我所知,这需要解决方法:某种通配符映射或 url 重写! +1 是一个很好的答案。
          • IIS5 和 IIS6 都必须为未注册的扩展配置通配符映射(包括“无扩展”)
          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2010-12-27
              • 2012-02-28
              • 1970-01-01
              • 1970-01-01
              • 2015-06-02
              • 2011-03-03
              • 2019-10-17
              • 1970-01-01
              相关资源
              最近更新 更多