代码之家  ›  专栏  ›  技术社区  ›  GilliVilla

ASP.NET URL重新映射和重定向-需要最佳实践

  •  2
  • GilliVilla  · 技术社区  · 14 年前

    这是一个场景:我有一个大约5000个URL的列表,这些URL已经发布给了不同的客户。现在,在我的服务器端,所有这些URL的位置都已更改。不过,服务器还是相同的。这是一个带有.net3.5/c_的ASP.NET网站。

    我的要求是:虽然客户使用旧的源URL,但是他们应该被重定向到新的URL,而不需要任何感知到的更改或中间重定向消息等。

    我正试图理解整个场景:

    1. 我将把旧URL到新URL的实际映射放在哪里——在数据库或某个配置中。文件还是有更好的选择?

    2. 我如何实际实现重定向:
      我应该用server.transfer-ot-response.redirect编写一个方法吗?
      有没有一个最佳的实践,例如在httpmodules中放置实际的重新路由…或者它是应用程序开始请求?

    我希望用符合最佳实践的方法和非常低的性能下降(如果有的话)来实现。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Dan Diplo    14 年前

    如果您的应用程序已经使用了数据库,那么我将使用它。使旧的URL成为主键,查找速度应该非常快。我会亲自用.NET类包装整个东西,这些类抽象它并允许您创建一个 Dictionary<string,string> 所有可以从数据库加载到内存并缓存的URL。这会更快。

    绝对不要用 Server.Transfer . 相反,你应该做一个 301 Permanently Moved 重定向。这会让 search engines know 使用新的URL。如果您使用的是NET 4.0,则可以使用 HttpResponse.RedirectPermanent 方法。但是,在早期版本中,您必须自己设置头文件-但是 this is trivial .

        2
  •  0
  •   del.ave    14 年前

    将数据保存在数据库中,但加载到ASP.NET缓存以减少访问时间。

        3
  •  0
  •   Justin Morgan    14 年前

    您肯定想使用httpmodules。这是公认的做法,而且最近尝试在global.asax内部进行,我可以告诉您,除非您只想做最简单的事情(即 "~/mypage.aspx/3" <-> "~/mypage.aspx?param1=3 )它比看上去复杂多了,而且很轻便。

    事实上,我甚至后悔尝试推出自己的URL重写解决方案。如果你想要你可以依靠的东西,那是不值得的。斯科特·古思里 a very good blog post on the subject 他建议 UrlRewriter.net UrlRewriting.net 作为一对免费的开源URL重写解决方案。

    祝你好运。