在修改ASP.NET网站后维护旧URL

时间:2011-03-07 16:18:54

标签: asp.net url url-rewriting url-routing

有一个ASP.NET 2.0网站,我打算迁移到基于ASP.NET 4.0的新Web框架。虽然我知道这涉及手动准备脚本/程序以将站点的内容从旧应用程序的数据库架构转换为新的,但我更关心的是保留旧的URL格式;将它们映射到新的Web引擎的URL格式。

我还没有确定什么是最适合迁移的CMS引擎(因此Web表单或MVC仍然不清楚)。但是,我想借鉴每个人的经验

  • 需要注意的一般问题(无论Web应用程序平台如何)
  • 候选策略/技术以处理ASP.NET中的URL重映射

已经为网站配置了Google Analytics(分析),因此有一个需要学习的链接最多的历史记录 - 这是重新映射的最重要的网址格式,不值得保留。

由于工作领域我已经被转移到过去几年,我无法跟上可以帮助解决这个问题的最新ASP.NET功能。奇怪的是,我发现很少有材料讨论如何正确保存旧URL;大多数网站在执行设计大修时完全丢弃旧的链接是非常讨厌的。

我首先想到的最简单的技术就是在web.config中指定一个自定义的404 aspx页面,该页面将读取旧请求的URL(将带有原始内容ID)。根据内容ID,查找自定义数据库表以查找新的内容ID,并使用新URL重定向。

此时我不确定我是否想要使用URL重写HttpModule或扩展,因为我只想在它变为404时才发生“查找”,而不是检查每个请求。知道旧的URL请求最终会随着时间的推移而消失。

我应该考虑哪些其他因素/方面?

1 个答案:

答案 0 :(得分:1)

对于SEO性能,如果你想为每个页面保持良好的链接值,你应该发出301,这是一个永久重定向,搜索引擎会用来传递任何链接权益,所以发布404或302并不是一个好主意。到新的网址。

使用MVC,您可以将旧网址注册到使用某种形式的专用RedirectController的路线,例如:

public class RedirectController : Controller
{
  public ActionResult RedirectArticle(int articleId)
  {
    string newUrl = // do something to figure out the new url, e.g. http://localhost/article/1 -> http://localhost/1/my-custom-article-url

    return RedirectPermanent(newUrl);
  }
}

这样,您可以注册路由以支持旧基础架构和新基础架构,RedirectController将适当的页面特定301重定向到新页面。

routes.MapRoute(
  "NewArticleUrl",
  "/{articleId}/{articleTitle}",
  new { controller = "Article", action = "Display");

routes.MapRoute(
  "OldArticleUrl",
  "/article/{articleId}.aspx",
  new { controller = "Redirect", action = "RedirectArtciel" });