1. 程式人生 > >IIS配置.html的對映後無法訪問.html檔案(學習收藏)

IIS配置.html的對映後無法訪問.html檔案(學習收藏)

IIS配置.html的對映問題,其實這個問題可以說是HttpHandlerFactory的在web.config中註冊的問題

問題描述:
     一套網站程式使用URL重寫,配置了ISAPI對映.html 動作全部,檢查檔案是否存在 不打勾 如下圖

問題: 不對IIS配置.html的對映,IIS站點目錄下.html頁面都能顯示。當配置了.html的對映 IIS站點目錄下真實存在的.html頁面無法顯示,錯誤資訊:“頁面無法顯示”而通過自定義HttpHandlerFactory塊過濾的.html檔案能夠顯示,由於這個原因就連FCKEditor也無法正常顯示。

這個問題困擾了半天,極度鬱悶, 在網上找了好久,也沒有個辦法,有一個和我一樣的問題,但上面說的解決方法卻不好用,更是鬱悶,後來經過n次的測試修改,才把這個問題解決了,解決方法:
1、首先照舊在網站配置的應用程式副檔名對映中新增副檔名.html對映到aspnet_isapi.dll,是否存在不選;
2、在web.config檔案中<compilation>節點下新增code:

<buildProviders>
        <add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
注:僅僅設定應用程式對映是不夠的,沒有為副檔名“.html”註冊的生成提供程式。因此別忘了上面的code!



3、在web.config檔案中<system.web>節點下新增code:
<httpHandlers>
      <add path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
    </httpHandlers>

注:這裡值得注意的是add的先後順序,很簡單的原理,通過這個配置檔案請求首先要到我們自定義的httpHandler塊,如果不在我們指定的path裡,則走系統的PageHandlerFactory; 還有一個要注意的地方就是,這裡當

<add path="html/*.html" verb="*" type="AutoModuleService.AutoHandlerFactory,AutoModuleService" validate="true"/>
指明路徑後,並不像下級目錄繼承,也就是當用戶瀏覽html/vip/index.html時,被系統的System.Web.UI.PageHandlerFactory正常處理;如果需要繼承指明路徑下包括下級目錄所有*.html的話,則就需要做些修改了

修改方法:

上面的1和2照做;

3、在web.config檔案中<system.web>節點下新增code:

<httpHandlers>
      <add path="*.html" verb="*" type="System.Web.UI.PageHandlerFactory" validate="true"/>
    </httpHandlers>

4、在web.config檔案中<configuration>節點下使用<location>節點,新增code:

<location path ="html">

    <system.web>
      <httpHandlers>
        <add path="*.html" verb="*" type="AutoModuleService.AutoHandlerFactory,AutoModuleService" validate="true"/>
      </httpHandlers>

    </system.web>

</location>

最後補充兩點:
如果你用到的字尾型別是一種古怪的字尾。
比如:*.aaa *.csdn 等這樣的字尾,
在IIS6 中,你需要額外再多做一步:
在IIS的站點屬性->HTTP頭->MIME型別中增加一個該字尾的MIME型別,不然遇到該字尾的請求時將首先被IIS給攔截掉,沒辦法顯示的。