2011-03-18 119 views
0

我想所有请求路由中的域名为“xyz.com” accours,如:ASP.NET MVC路由:重新路由完整域(内部)

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通配符?

在此先感谢

回答

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

在global.asax – bmancini 2011-03-18 17:53:03

+0

我不得不把行动过滤器放在每一个行动,我猜...所以这不是一个操作对我来说 – David 2011-03-18 18:31:17

+0

然后把它放在Global.asax – 2011-03-18 18:35:23

0

一个Response.Redirect的意志仍然发送一个临时的302状态码。如果你希望搜索引擎理解你的网站已经移动搜索引擎优化的目的,你会希望确保您使用的是301

首选

如果你正在使用IIS7,你也可以用URL做到这一点重写模块。 http://www.iis.net/download/urlrewrite

安装它,并在这看起来是这样的

<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添加在web.config坚持规则中有下面

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

} 
+0

谢谢!我现在要用第二个UPDATE: – David 2011-03-18 18:20:36

+0

UPDATE:Ups,似乎它只能在顶层请求上工作。mvc路由在BeginRequest之前跳转 – David 2011-03-18 18:26:47

+2

如果使用.Net 4,则可以使用Response.RedirectPermenant( url,true);'。 – Joshua 2011-03-18 18:45:49