2010-03-02 70 views
1

我們在.net網站上使用自定義urlrewiter,並設置通配符映射將任何請求重定向到.net isapi過濾器進行處理。IIS6通配符映射斷裂.net自定義錯誤

這工作正常,但我們已經注意到我們的自定義404頁面不工作,iis處理404s的問題,而不是。我們配置的web.config中的自定義錯誤如下

<customErrors mode="On"> 
    <error statusCode="404" redirect="/404.aspx"/> 
    <error statusCode="500" redirect="/500.htm"/> 
</customErrors> 

我注意到,如果我請求與一個aspx擴展(www.mysite.com/madeuppage.aspx)的頁面自定義的errorPage供應,但不是無效的目錄(www.mysite.com/madeupdirectory/)。我想這是因爲IIS正在將aspx頁面傳遞給.NET Enginbe進行處理,但我認爲通配符映射也會通過directorys?

這可以通過我在IIS中配置自定義錯誤頁面來解決,但我寧願在web.cofig中配置它,如果可能的話?有任何想法嗎?

回答

1

IIS傳遞404請求模塊,但只執行幾個事件:

IIS_BeginRequest /qwe 
IIS_AuthenticateRequest 
IIS_AuthorizeRequest 
IIS_ResolveRequestCache 
IIS_PostResolveRequestCache 
IIS_EndRequest/qwe 

我的赫利猿的開發者之一(http://www.helicontech.com/ape)。實際上,當我請求不存在的頁面時,上面的事件在Ape內執行。 您可以嘗試猿,因爲它有URL重寫和自定義錯誤解決方案。示例:

ErrorDocument 500 http://www.domain.com/cgi-bin/tester 
ErrorDocument 404 /custom_error_page.htm 
ErrorDocument 403 "Sorry, the access is forbidden" 

如果相關,則語法爲基於文本且與Apache兼容。

+0

好吧,我看看猿,但我認爲如果我仍然使用我們自己的重寫器,那麼您在這裏說的是讓我的自定義url重寫器處理自定義錯誤頁面,而不是將它留給.NET引擎? – Sheff 2010-03-05 16:45:17

+0

我乞求延期。您可以使用自定義模塊來處理這些響應。雖然它取決於模塊的實現,但我相信這是可能的。如果猿可以這樣做,你的模塊也可以。 – Slava 2010-03-10 10:49:14

0

您的自定義url重寫器是一個HttpModule實現?我認爲你的解決方案在那裏,但這取決於實施本身。 如果您處理任何請求,則不管是.aspx還是.xxx或目錄。

例如:在我們的產品中,我們使用RegularExpressions捕獲路徑或擴展或URI中的任何內容來處理該請求,這取決於某些商業邏輯。

也許你想要介於兩者之間的東西。我不明白你的問題在全球範圍

+1

問題是.NET引擎甚至沒有處理請求。 IIS處理請求並返回自己的404,而不將請求傳遞給.NET。林不知道爲什麼作爲全球通配符處理這個重寫器? – Sheff 2010-03-03 09:14:24