Подтвердить что ты не робот

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 снова загрузил наши документы по умолчанию?

4b9b3361

Ответ 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>