2011-08-04 36 views
19

我們的某些開發人員工作站遇到問題:訪問沒有文件名的URL時(例如http://localhost/),IIS 7返回404錯誤。每個人都在運行Windows 7/IIS 7.5和ASP.NET 4.0。應用程序池配置爲使用Classic管道模式。IIS 7無法使用默認文檔

默認文檔已啓用,並且default.aspx位於默認文檔列表中。

我啓用失敗請求跟蹤,看看這個在日誌中:

OldHandlerName="", NewHandlerName="ExtensionlessUrl-ISAPI-4.0_64bit", 
    NewHandlerModules="IsapiModule", 
    NewHandlerScriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll", NewHandlerType="" 

後來,我看到這個IsapiModule被拒絕的請求:像IIS認爲

ModuleName="IsapiModule", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="404", 
    HttpReason="Not Found", HttpSubStatus="0", 
    ErrorCode="The operation completed successfully. (0x0)", ConfigExceptionInfo="" 

它看起來ExtensionlessUrl-ISAPI-4.0-64bit應該處理請求。當我查看該模塊的配置時,它顯示它應該匹配路徑*.,所以我很困惑它爲什麼匹配沒有路徑。

谷歌搜索從2005年起變成this post on the IIS.net forums。不幸的是,沒有提供任何解決方案,只是承認問題。

當我更新我的應用程序池以使用集成模式時,問題消失。不幸的是,它必須以經典模式運行。

我能做些什麼來讓IIS再次服務我們的默認文檔?

+1

查找出來,如果你已經安裝的Windows7 SP1或修補程序KB KB980368。我有一些與此修補程序(這是捲入SP1)shenanigans:http://stackoverflow.com/questions/5080837/asp-net-2-0-and-4-0-seem-to-treat-the-根url-different-in-forms-authenticatio – Kev

+0

@Kev謝謝。您鏈接的知識庫文章似乎解釋了我遇到的問題。 –

+0

奇,我有同樣的問題,但我的經典模式,但不是在集成模式(我必須使用)。 –

回答

21

它看起來像微軟發佈an update that enables the ExtensionlessURL HTTP handler to work with extensionless URLs。不幸的是,這打破了其他一些處理程序。在我的情況下,經典應用程序池下的DefaultDocument處理程序。解決的辦法是刪除我們的應用程序的web.config中ExtensionlessURL處理程序:

<system.webServer> 
    <handlers> 
    <remove name="ExtensionlessUrl-ISAPI-4.0_32bit" /> 
    <remove name="ExtensionlessUrl-ISAPI-4.0_64bit" /> 
    <remove name="ExtensionlessUrl-Integrated-4.0" /> 
    </handlers> 
</system.webServer> 
+1

這解決了我的同樣的問題,我的index.php沒有被調用。我在Classic模式下配置了一個應用程序池,用於運行PHP的嵌套應用程序。 –

+3

請注意,對我來說這不起作用 - 它需要是「ExtensionlessUrlHandler-Integrated-4.0」。 –

13

我解決了這個問題,把「StaticFile」處理程序中的HandlerMapping前面的「ExtensionlessUrlHandler- *」

+0

這也適用於我。我正在運行一個混合網站,一箇舊的migrated asp.net 2站點以及MVC5,並且在升級到MVC5之後,我的默認文檔(足夠粗糙,它不是一個靜態頁面,我的默認頁面是Default.aspx,並且有大量的代碼),並將StaticFile移到Extensslessurlhandler-ISAPI-4.0_32bit和另外兩個extensionlessUrlhander的上面,對問題進行排序。咦!這次真是萬分感謝!請注意,它會讓你的Web配置一團糟,因爲手動將處理程序「移動」到上述其他處理程序之上,將移動web.config中列出的所有處理程序。 – snowcode

0

更改StaticFile在IIS中將默認文檔設置爲網站應用程序時,訂單幫助解決了問題,而根網站也有另一個默認文檔。

0

我注意到當從應用程序池中刪除託管.NET框架(4.0)時,它也解決了我的問題!

我們在我們的IIS環境中完全不使用.NET!

0

將DefaultDocument組件添加到IIS中添加/刪除Windows功能,然後插入我的默認腳本(index.php)的名稱爲我工作。

0

我用下面的規則在web.config中的URL重定向作爲解決方法,以解決這個問題:

<system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="Default document rewrite" stopProcessing="true"> 
      <match url="^(.+/)?$" /> 
      <action type="Redirect" url="https://{HTTP_HOST}/default.aspx" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer>