1. 程式人生 > >iis 無法顯示htm頁面問題

iis 無法顯示htm頁面問題

周5按照網上的文章使用IIS搭建了一個php網站,確實成功運行了。
週一來公司上班,再次訪問網站,悲劇了,網站任何頁面都打不開,xxx.htm都不行。。。
我很確定站點IIS配置是沒有問題的,各個選項都看了幾遍,IIS日誌也看了,沒啥可疑的地方。
此時IIS上的其它ASP站點都是可以正常訪問的。。。


然後使用必應搜尋了一下,沒發現類似的問題,最後下面這篇文章給了我靈感:
http://blog.csdn.net/zjlovety/article/details/7728134


-----------------------------------------------------------------------------------------------------------------
IIS連最基本的htm都訪問不了的原因及解決方法:

1、右鍵 IIS相應網站-->屬性-->ISAPI篩選器,之前為了能夠訪問php我在這裡添加了Php篩選器,

而php-cig.exe並不是真正的ISAPI篩選器(php5isapi.dll),將其刪除後,一切正常了。

ISAPI即Internet Server Application Program Interface,是微軟提供的一套面向Internet服務的API介面



--------------------------------------------------------------------------------------------------------------------
後記:
奇怪的是,為什麼我周5搭建好後,一切是正常的,而週一訪問時卻訪問不了呢?
我重新添加了一下ISAPI的PHP篩選器(即恢復成周5的配置),再次訪問站點,是可以訪問的,
說明配置沒有生效,然後我回收了該站點的應用程式池,此時站點訪問不了了,看了下應用程式池的
配置,在凌晨2點自動回收,KO,原來是這樣子,終於找到了真正的原因,周5配置白天配置時,
應用程式池沒有回收,ISAPI配置無效,一切正常,週一時,應用程式池被回收,ISAPI生效,
PHP篩選器導致任何頁面無法訪問。。。

 ------------------------------------------------------------------------------------------------------------------------------------------

最後,帖一下給我靈感的那篇文章,算是備份了:

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給攔截掉,沒辦法顯示的。