2011-03-18 101 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