IIS 7, не обслуживающий документ по умолчанию
У нас есть проблема, возникающая на некоторых наших рабочих станциях разработчиков: при посещении URL без имени файла (например, http://localhost/), IIS 7 возвращает ошибку 404. Все работают под управлением Windows 7/IIS 7.5 и ASP.NET 4.0. Пул приложений настроен на использование режима классического конвейера.
Документы по умолчанию включены, а 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 отклоняет запрос:
ModuleName="IsapiModule", Notification="EXECUTE_REQUEST_HANDLER", HttpStatus="404",
HttpReason="Not Found", HttpSubStatus="0",
ErrorCode="The operation completed successfully. (0x0)", ConfigExceptionInfo=""
Похоже, что IIS считает, что ExtensionlessUrl-ISAPI-4.0-64bit должен обрабатывать запрос. Когда я смотрю на эту конфигурацию модуля, она показывает, что она должна соответствовать пути *.
, поэтому я смущен, почему он не соответствует пути.
Поиск Google включает этот пост на форумах IIS.net с 2005 года. К сожалению, никаких решений не предлагается, просто подтверждение проблема.
Когда я обновляю свой пул приложений для использования интегрированного режима, проблема исчезает. К сожалению, он должен запускаться в классическом режиме.
Что я могу сделать, чтобы IIS снова загрузил наши документы по умолчанию?
Ответы
Ответ 1
Похоже, Microsoft выпустила обновление, которое позволяет обработчику HTTP ExtensionlessURL работать с URL-адресами без расширения.. К сожалению, это нарушает некоторые другие обработчики. В моем случае обработчик DefaultDocument в классических пулах приложений. Решение заключается в удалении обработчиков ExtensionlessURL в нашем приложении web.config:
<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>
Ответ 2
Я решил проблему с установкой обработчика "StaticFile" в HandlerMapping перед "ExtensionlessUrlHandler - *"
Ответ 3
Изменение порядка StaticFile помогло устранить проблему при настройке документа по умолчанию для приложения веб-сайта в IIS, а корневой веб-сайт также имел другой документ по умолчанию.
Ответ 4
Я заметил, что при удалении управляемой платформы .NET(4.0) из пула приложений она тоже исправила проблему!
Мы вообще не используем .NET в нашей среде IIS!
Ответ 5
Добавление компонента DefaultDocument в IIS в функции добавления/удаления окон, а затем вставка имени моего default script (index.php) работала для меня.
Ответ 6
Я использую следующее правило в URL-адрес URL-адреса web.config как обходное решение для решения этой проблемы:
<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>