重定向某些请求

时间:2014-10-14 19:14:49

标签: c# asp.net-mvc-3 url-rewriting http-redirect

我在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

如您所见,我们将控制器XY移至www.new.com下的新网站。现在,如果用户尝试访问http://www.current.com/Xhttp://www.current.com/Y,我们希望将其重定向到http://www.new.com/Xhttp://www.new.com/Y。我们不会重定向尝试访问控制器 A B 的用户。

最好的方法是什么?我已经研究过自定义路由,但没有看到任何证明上述行为的示例。我们不希望通过IIS进行任何重定向。

2 个答案:

答案 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才能正常工作。