让我解释一下。最近,我将经典的ASP应用程序迁移到.net MVC4。旧站点由很多html和aspx页面组成,即:
自然,旧的asp网站是通过 www.library.com/index.html、www.library.com/book.html、www.library.com/contactus.aspx 等网址访问的等
现在,可以通过路由器访问当前的MVC站点,即 www.library.com/Home、www.library.com/Book、www.library.com/Contact 。
许多公司客户尝试使用旧的URL访问新站点,这是一个问题,我需要从代码中找到解决方案。
我尝试了一些解决方案,但是没有用。
解决方案一
对于旧的aspxs页面,可以在新站点的根目录上以与旧站点相同的名称创建aspx页面,并在Page_Load中从代码隐藏处重定向
//Create contactus.aspx on root directory project and redirect
public partial class Contact : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.RedirectToRoute(new { controller = "Contact", action = "Index" });
}
}
对于html页面,您可以在meta标签上定义简单的刷新
//Create a html page, i.e., index.html
<meta http-equiv="refresh" content="0; url=http://library.com/Home" />
<p><a href="http://example.com/">Redirect</a></p>
这不是一个可行的解决方案,必须为每个所需的重定向创建一个html页面或aspx页面。
解决方案2
我尝试在Global.asax上定义重定向条件,但是不起作用
protected void Application_BeginRequest(object sender, EventArgs e )
{
string url = Request.Url.ToString().ToLower();
if (url.Contains("index.html"))
Context.Response.RedirectPermanent("/Home");
else if (url.Contains("book.html"))
Context.Response.RedirectPermanent("/Book");
else if (url.Contains("contactus.aspx"))
Context.Response.RedirectPermanent("/Contact");
}
解决方案3
我已经尝试在RouteConfig.cs上定义用于重定向的地图,但也无法正常工作
//Trying redirect on RegisterRoutes() in RouteConfig.cs
routes.MapRoute(
name: "Home",
url: "index.html",
defaults: new { controller = "Home", action = "Index" }
);
routes.MapRoute(
name: "Book",
url: "book.html",
defaults: new { controller = "Book", action = "Index" }
);
routes.MapRoute(
name: "Contact",
url: "contactus.aspx",
defaults: new { controller = "Contact", action = "Index" }
);
当用户尝试正确访问旧的ASP站点URL时,如何重定向到新的MVC路由?需要找到一种快速且经济的解决方案,谢谢您的帮助。
答案 0 :(得分:0)
您需要根据正则表达式模式进行网址重写。请参阅此thread,OP(@Eilimint)已内联更新了解决方案。这可能是一个优雅的解决方案,允许我们在不更改代码的情况下进行覆盖。
<rule name="Redirect to new domain" stopProcessing="true">
<match url="^(.*)$" />
<conditions>
<add input="{HTTP_HOST}" matchType="Pattern" pattern="^olddomain(:\d+)?$" />
</conditions>
<action type="Redirect" url="https://my.newdomain.io/{R:1}" redirectType="Permanent" />
</rule>