2012-12-27 16 views
2

我有一個名爲mywebsite.com的域名,但我更喜歡用戶通過www子域訪問我的網站。根據URL在ASP.NET中重定向網頁

如何輕鬆實現在asp.net mvc3中的驗證和重定向?

當我在使用PHP我做了這樣的事情:

if($_SERVER['SERVER_NAME'] != "www.mywebsite.com") 
    header('Location: www.mywebsite.com'); 

我想找到一個類似的方式來實現這種重定向在asp.net(C#)(我寧願不設置301重定向,但只是一個像我在PHP中使用的軟重定向)。

我知道我可以在我的每個控制器中執行驗證操作方法,並重定向用戶,如果他不在子域www.mywebsite.com但我寧願寫一次驗證和重定向和我找不到在哪裏:/

非常感謝!

回答

0

你可以嘗試這樣的事情

if(!Request.Url.Host.Equals("www.mywebsite.com")) 
{ 
     Response.Redirect("website"); 
} 
+0

我知道我可以用這種方式驗證主機,但我可以在哪裏放置代碼?我不想在所有控制器的每個操作方法中複製/過去或調用方法:/ – ggobbe

+0

將它放入您的主頁面加載 – DWolf

+1

我沒有母版頁,因爲我正在執行MVC3 asp。網絡應用。因此,我只有共享的意見,而不是一個母版頁:( – ggobbe

2

你可以使用:

Request.Url.ToString() 

這將返回URL,那麼你就可以快速檢查,如果它包含的 'www。'如果爲真則重定向。但是我會建議你在URL中重寫這個URL。

請按照此處的指南:http://www.dotnetexpertguide.com/2011/08/iis-7-redirect-domaincom-to.html這是爲了使domain.com轉到www.domain.com,但它的工作方式與此相反。

+0

我會嘗試通過IIS管理器訪問IIS,因爲我有一個共享的Windows主機,但通常它會好的,謝謝:) – ggobbe

+0

你可以問你的主機如果它沒有提供透徹的面板,爲你執行此操作,他們將這樣做,因爲它是一個非常基本的東西:) –

+0

我已經通過IIS管理器 - Url重寫模塊設置它。有一位助理創建了一條新規則,我只需要選擇主域名,然後重定向其他域名就可以了! 它完美地工作<3 – ggobbe

0

實際上,原來的問題特別要求「軟」重定向(201或202)而不是移動永久/找到(301/302),所以我認爲,而不是Response.Redirect條件行應該是:

if(!Request.Url.Host.Equals("www.mywebsite.com")) 
{ 
     HttpContext.Current.Response.Headers.Add("Location", "www.mywebsite.com"); 
} 

編輯:我認爲狀態還可以直接設置,配合使用的Response.Redirect:

if(!Request.Url.Host.Equals("www.mywebsite.com")) 
{ 
     HttpContext.Current.Response.Redirect("www.mywebsite.com"); 
     HttpContext.Current.Response.Status = "201 Created"; 
} 
+0

謝謝你完全按照我的意思去做,但是我必須把這段代碼放在我的所有控制器的每個操作方法中,或者我可以找到一個可以放置一次的地方,它可以控制所有的控制器和行動(如Global.asax)? – ggobbe

+0

有幾種方法可以實現這一點。 在傳統的WebForms應用程序上,您可以創建一個繼承自基本System.Web.UI.Page類的類,在Page_Load事件中實現此內容並從此新類繼承而不是System.Web.UI.Page您創建的每個新頁面。 您也可以實現一個HTTP模塊來攔截所有HTTP請求,並在PostAcquireRequestState事件的處理程序上實現此功能。 – OnoSendai

+0

謝謝,這正是我需要:) – ggobbe

0

如果你正在尋找只需添加/追加頭信息,然後使用Response.AppendHeader()

根據Ryan的回答,可以檢查Request.Url.ToString()屬性的URL。

+0

我正在使用此片段: if(!Request.Url.ToString()。StartsWith(「www」)) { Response.AddHeader(「Location」,「http://www.mywebsite.com 「+ Request.RawUrl); } 在我的家庭控制器的索引方法(這是入口點)。但有時用戶通過另一個控制器和/或操作到達我的網站,因此驗證沒有完成。 – ggobbe

0

如果我在這裏沒有完全錯過某些東西,難道你不能只在網站的IIS設置中設置主機頭來包含www.domain.com和domain.com?