ASP.NET MVC路由:重新路由完整域(从内部)

时间:2011-03-18 17:49:05

标签: c# asp.net-mvc routing

我想路由所有域名为“xyz.com”的请求,例如:

http://xyz.com/asdf/1
http://www.xyz.com/asdf/1
http://www.xyz.com/bcd/asd/2

只是到另一个域:

http://www.abc.com

我如何通过MVC的路由机制实现这一目标? RouteHandler? MapRoute通配符?

提前致谢

2 个答案:

答案 0 :(得分:1)

您无法通过VIA mvc路由进行此操作,但您确实有以下几种选择:

<强> Global.asax中

protected void Application_BeginRequest(){
    if (Context.Request.Url.Contains("xyz.com"))
        Response.Redirect(Context.Request.Url.ToString().Replace("xyz.com", "www.xyz.com"));
}

答案 1 :(得分:0)

response.redirect仍会发送临时302状态代码。如果您希望搜索引擎了解您的网站已经移动用于搜索引擎优化目的,您将需要确保使用301.

<强>优选

如果您使用的是IIS7,您还可以使用URL重写模块完成此操作。 http://www.iis.net/download/urlrewrite

安装它,并将规则粘贴在看起来像这样的web.config中

  <rule name="Forward XYZ to ABC" stopProcessing="true">
      <match url="(.*)"  />
      <conditions logicalGrouping="MatchAny">
        <add input="{HTTP_HOST}" pattern="^xyz\.com$" />
        <add input="{HTTP_HOST}" pattern="^www.xyz\.com$" />
      </conditions>
      <action type="Redirect" url="http://www.abc.com/{R:1}" redirectType="Permanent" />
    </rule>

<强>替代

在global.asax中添加以下内容

protected void Application_BeginRequest(){
    if (Context.Request.Url.Contains("xyz.com"))
    {
       Response.StatusCode = 301;
       Response.RedirectLocation = url;
       Response.End();
    }

}