【发布时间】:2012-01-22 20:11:34
【问题描述】:
我正在将现有的经典 ASP 网站转换为 (VB) MVC,并且我不希望任何现有的 URL 中断。我已经阅读了很多关于如何进行正确的 301 重定向的帖子(例如:Routing Classic ASP Requests To .NET - SEO Redirects)。在最新的 MVC 版本中,我已经收集到了
Response.RedirectPermanent(objRedirect.new_url, True)
这就是我们所需要的。
我已在数据库表中输入了所有旧 URL,并带有新 URL 的对应列。我在自定义 404 页面中添加了代码以获取原始 URL:
Dim strURL As String = Request.RawUrl.Substring(Request.RawUrl.IndexOf("aspxerrorpath=") + 15).ToLower()
所以我可以在数据库中查找它。 (有趣的旁注,这里的 MSDN 文档 - Redirect Mode - 似乎说如果我在 web.config 的 CustomErrors 部分设置 RedirectMode=ResponseRewrite,我就不必担心执行上述操作,但是当我尝试过时那,我收到 IIS 错误,说它不会提供 ASP 页面?!?!?)
我遇到的问题是,与新 MVC 路由具有相同目录的任何旧的经典 ASP URL 都以某种方式被部分路由。例如,“/test/default.asp”在我的错误页面的上述 strURL 变量中显示为“/test/test”。
我确实为“测试”设置了路线:
routes.MapRoute("Test", _
"test/{action}", _
New With {.controller = "test", .action = "index"})
在 Global.aspx.vb 中,但我也尝试了所有可能的方法来忽略路由中的所有 ASP 页面(似乎无济于事)。这是我所做的尝试(我确实看到了一个旧的 - 2008 年 - Phil Haack 的帖子,说我只能拥有这些“全部”忽略路线之一,但不知道这是否仍然有效? ):
routes.IgnoreRoute("{file}.asp")
routes.Ignore("{resource}.asp/{*pathInfo}")
routes.IgnoreRoute("{resource}.asp/{*pathInfo}")
routes.Add(New Route("{resource}.asp/{*pathInfo}", New StopRoutingHandler()))
并且它们似乎都没有任何区别(显然我一次尝试了它们)。
这也不仅仅局限于一个路由 - 它发生在旧站点上存在的与新站点上的命名路由匹配的任何目录。
提前感谢您提出的所有建议!
更新:这是我发现的另外 2 个“问题”:
- 我丢失了原始查询字符串。所以,如果 product.asp?id=1 被请求,我在错误页面中只有 product.asp (知道如何获取/保存原始查询字符串吗?)
-
我的另一条路线如下所示:
routes.MapRoute("IndependentSales", _ “独立销售/{action}”,_ 新的 {.controller = "independentsales", .action = "index"})
当我请求“/resale/default.asp”时,它转到“resale/independentsales”。这是怎么回事???
【问题讨论】:
-
您是完全迁移系统还是仍然依赖旧的asp页面?
标签: vb.net model-view-controller asp-classic routing redirect