2011-03-09 24 views
0

我認爲這應該是一個簡單直接的問題,但經過太久的努力之後,我將不得不尋求幫助。如何通過ASP.NET/IIS 6中的模式自動重定向URL?

我需要的是將我的Web應用程序的所有請求都重定向到匹配以下模式 - 「^(http://[^/]+/blogs/[^/.]+)/?$」到「$1/Default.aspx」的路徑。

(使用英語,而不是正則表達式:http://myapp/blogs/randomdirthatdoesntexist - >http://myapp/blogs/randomdirthatdoesntexist/default.aspx

在「博客」的子目錄物理上不存在,而是與請求第三方產品交易,以randomdir/Default.aspx的」,但是當你去「randomdir /」你404找不到,這就是我想解決的問題。

我試過使用global.asaxHttpHandler,但我不能讓他們中的任何一個啓動對這些404路徑的請求。

所以,總之,我應該怎麼做做重定向不存在目錄的路徑嗎?

謝謝。

回答

1

我通過將IIS中的404錯誤頁面設置爲您創建的頁面來完成類似的操作。該頁面可以訪問正在請求的頁面,並執行一些額外的邏輯。所以404的randomdirthatdoestetexist /仍然發生,但404處理程序注意到這一點,並重定向到randomdirthatdoesntexist/default.aspx。

我翻出我的舊代碼和調整它一點點地做你的過於簡單化的方式所需要的,但我沒有任何地方IIS6測試:

protected void Page_Load(object sender, EventArgs e) 
{ 
    String sQueryString = Request.RawUrl.Substring(Request.FilePath.Length); 
    Regex rx = new Regex(@"^\?(?<errorcode>\d+);(?<args>.*)$", RegexOptions.ExplicitCapture | RegexOptions.Compiled); 
    Match m = rx.Match(sQueryString); 


    if (m.Success) 
    { 
     if (m.Groups["errorcode"].Value == "404") 
     { 
      String sArgs = m.Groups["args"].Value; 
      Uri requestedUri = new Uri(sArgs); 

      // You can now check the value of uri and perform redirection... 
      if (requestedUri.ToString().EndsWith("/")) 
      { 
       Response.Redirect(requestedUri + "Default.aspx") 
      } 
     } 
    } 
    Response.StatusCode = 404; 
} 
+0

謝謝,我最終將IIS中的404和403錯誤頁面引用到了我的HttpHandler中,就像一個魅力一樣 – yellowblood 2011-03-09 13:15:55

0

使用一個Custom HttpModule或Http處理程序,該程序在Http Request管道中足夠早地定位,以便在確定任何可能的404響應之前適當地引導您的請求。

查看我自己的SO問與答; Server.Transfer or Server.RewritePath瞭解更多詳情。

+0

我不明白,從這個答案我應該怎麼把我的HttpHandler放在前面。 – yellowblood 2011-03-09 13:16:52

+0

@yellowblood在web.config中添加HttpModule,它可以在Application_BeginRequest中使用Server.Transfer中的自定義代碼來改變HttpRequest的服務器上的目標。這就是URL重寫的常用方法。還有Application_EndRequest可以在返回客戶端之前修改響應。本文可能會給你一個更好的主意; http://www.4guysfromrolla.com/articles/011404-1.aspx – 2011-03-10 01:57:52

+0

感謝您澄清,如果我再次面對這個問題,這似乎是一個更好的方式來做到這一點。 – yellowblood 2011-03-10 11:06:20