2011-02-24 72 views
0

搜索與無濟於事幾小時所以這裏去在asp.net從子域提供靜態內容......使用URL重寫

我有的每天收到相當多的點擊率,並已域問我是否可以提供來自子域的靜態內容。由於該網站是相當廣泛,已經寫了,我想知道是否有什麼辦法可以使用URL重寫,以改變:

www.example.com/image.gif

靜態的。 example.com/image.gif

我有一個解決方案,使用301重定向,但從我的理解,這是反生產力,因爲2請求將不得不每個圖像。我真的不想通過所有的aspx頁面和css來硬編碼新的url,因爲它會導致更多的問題 - 網站的某些部分仍在開發中,靜態內容可能隨時發生變化。我嘗試使用重寫(而不是重定向)更改URL,但它出來是這樣的:

http://www.example.com/http://static.example.com/image.gif

你將如何實現這一目標?我可以完全訪問DNS和服務器(win 2008r2/IIS 7.5),如果URL重寫不是答案,那麼可以進行任何更改。

在此先感謝

Tom。

+0

您是否已經配置並正在運行網站http://static.example.com/? – 2011-02-24 17:56:23

回答

1

您可以使用HttpModule完成此操作。以下示例捕獲對gif文件的所有請求,並將絕對路徑更改爲指向託管靜態內容的備用站點。試試這個方法的HTTP模塊的內部:

private void Application_BeginRequest(Object source, EventArgs e) 
    { 
     // Create HttpApplication and HttpContext objects to access 
     // request and response properties. 
     HttpApplication application = (HttpApplication)source; 
     HttpContext context = application.Context; 
     string filePath = context.Request.FilePath; 
     string fullPath = context.Request.Url.AbsoluteUri; 
     string fileExtension = VirtualPathUtility.GetExtension(filePath); 
     if (fileExtension.Equals(".gif")) 
     { 
      context.Response.ContentType = "image/gif"; 
      context.Response.Redirect(fullPath.Replace("www.example.com", "static.example.com")); 
     } 
    } 

欲瞭解更多有關的HttpModule,去這裏:http://msdn.microsoft.com/en-us/library/ms227673.aspx

我測試了上面的代碼 - 它的工作原理。我希望這有幫助。

+0

非常感謝,請求現在正在被正確重定向,儘管一個圖像被作爲text/html服務器!此方法是否不會引起每個圖像2個請求,以及它看起來像是發送302? – 2011-02-25 15:22:36

+0

我昨天注意到它給出了原始圖像請求的302響應,以及200重定向的文件(我在重定向的位置中設置了一個演示文件,因此是200)。這應該沒問題,除非你因爲某種原因想避免它。我不確定text/html問題。該圖像與其他圖像之間是否有明顯區別? – 2011-02-25 15:34:58

+0

Tom,你應該能夠明確地設置內容類型。看到我上面的答案 - 我在if塊中添加了一行。 – 2011-02-25 15:39:06