我在ASP.NET MVC3中工作。我们有一个网站,但我们会将网站的某些部分分拆到一个新网站。因此,一些控制器将被移动到新网站。我们希望将用户重新定向到新网站,如果他们尝试访问以前位于主网站中的网页。
当前网站结构:
http://www.current.com/A
http://www.current.com/B
http://www.current.com/X
http://www.current.com/Y
新网站结构:
网站一
http://www.current.com/A
http://www.current.com/B
网站二
http://www.new.com/X
http://www.new.com/Y
如您所见,我们将控制器X
和Y
移至www.new.com下的新网站。现在,如果用户尝试访问http://www.current.com/X
或http://www.current.com/Y
,我们希望将其重定向到http://www.new.com/X
或http://www.new.com/Y
。我们不会重定向尝试访问控制器 A
和 B
的用户。
最好的方法是什么?我已经研究过自定义路由,但没有看到任何证明上述行为的示例。我们不希望通过IIS进行任何重定向。
答案 0 :(得分:0)
我知道你说你不想通过IIS进行重定向,但是通过web.config的system.webServer
元素可以完全配置的IIS重写模块呢? ?
我没有准确的语法,但你可以使用正则表达式匹配控制器的X& Y并将网址重定向到您要使用的其他域。
您对IIS的要求很低,只需安装模块并依赖您的web.config配置其余模块。
这篇文章可以帮助您找到域级重写的正确途径:http://weblogs.asp.net/owscott/iis-url-rewrite-redirect-multiple-domain-names-to-one
答案 1 :(得分:0)
路由无法轻松地重定向到您的不同域。但是,如果您确实不想使用IIS重写规则(可以配置您的web.config),最简单的方法是让当前站点上的控制器在命中时发出重定向。
public Controller X{
public ActionResult Index(){
return Redirect("http://www.new.com/X");
}
}
您还可以使用自定义HTTPModule来处理重定向
public class RedirectHttpModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(this.context_BeginRequest);
}
private void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
//check here context.Request for using request object
if(context.Request.FilePath.Contains("ControllerPath"))
{
//do some extra work here to get the actual complete path
context.Response.Redirect(string.Format("http://www.new.com/{0}", Request.Url.AbsolutePath));
}
}
}
您必须在web.config中注册HttpModule才能正常工作。