2011-03-07 74 views
1

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

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

  • 一般性问题看出来的(不管网络应用平台)
  • 候选策略/技术来处理URL在ASP.NET
  • 重映射

Google Analytics已针对该网站进行了配置,因此存在最需要的学习链接的历史记录 - 这是重新映射的最重要的网址格式,哪些不值得保留。

由于工作领域我已转移到过去几年,我一直没有能够跟上最新的ASP.NET功能,可以帮助这一点。奇怪的是,我发现很少有内容讨论如何正确保留旧的URL。大多数网站在进行设计检修时完全舍弃其旧链接是非常令人讨厌的。

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

在这一点上,我不确定我是否想使用URL重写HttpModule或扩展,因为我只想在它变成404时引起“查找”,而不是检查每一个请求。知道旧的URL请求最终会随着时间消失。

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

回答

1

对于搜索引擎优化的表现,发布404或302并不是一个好主意,如果你想为每个页面保持良好的链接值,你应该发出301,搜索引擎将用来通过任何链接的永久重定向股权到新的网址。

在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" }); 
+0

我不打算直接向客户发出404或302; 404只适用于自定义404页面处理,然后再渲染301响应。 – icelava 2011-03-07 16:42:02

+0

这是一个很好的解决方案马修。你可以看看问题/ 29823873,并提出你的意见。 – Hitz 2015-04-23 14:57:47