我在 Win 2k3 伺服器和 IIS 上遇到這個奇怪的問題:
Iis 有幾個站點,在其中一個站點中我需要建立一個子目錄並將其設定為 Web 應用程式。我注意到,如果我建立新目錄並將一些 .js/.txt 檔案放入其中,iis 將不會提供它們(IE 給出錯誤 Internet Explorer 無法顯示網頁)。
如果我將相同的檔案放入另一個舊網站的子目錄中,它將正確顯示。
透過嗅探流量,我發現 iis 回復連接狀態 200,然後完全刪除任何連接
http://domain.com/test2/prova.txt
GET /test2/prova.txt HTTP/1.1
Host: domain.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
HTTP/1.x 200 OK
例如,如果我在 prova.asp 中重新命名檔案 prova.txt,它顯示沒有問題,所以它不應該是權限問題。
經過一些研究後,我發現這可能是由於缺少 mime 類型引起的,我檢查了 .txt 和 .js 是否存在並由 aspnet_isapi.dll 提供服務。這裡又出現了另一個奇怪的事情:如果我從目錄的屬性中刪除 mime 映射,它會正確提供,但同樣的事情不適用於 js。
我真的開始沒有想法了,有沒有人可以給點提示?
提前致謝。
答案1
我有同樣的問題。 IIS 執行稱為 MIME 類型過濾的操作。如果它不知道特定檔案副檔名的 MIME 類型,則會傳回 404 錯誤。
在 IIS <7 上: 開啟網站(或伺服器)屬性。點選HTTP 標頭標籤。點選MIME 類型按鈕。新增檔案類型 * 和 MIME 類型「application/octet-stream」。
對於 IIS 7+: 開啟 IIS 管理器。點選伺服器或網站。按兩下MIME 類型功能圖示。在操作窗格中,按一下添加。使用 * 填滿「檔案副檔名」框,使用「application/octet-stream」填滿 MIME 類型框。
如果您要建立 .NET 應用程序,您也可以在 web.config 檔案中執行相同的操作。
答案2
由於您已將這些擴充功能對應到 aspnet_isapi.dll,因此您現在需要告訴 ASP.NET 來處理它們。您正確地完成了 IIS 部分。
這是您需要在 httpHandlers 中設定的 PageHandlerFactory。我發現這個頁面深入介紹了它:http://aspnet.4guysfromrolla.com/articles/011404-1.aspx。