Назад | Перейти на главную страницу

Виртуальный хостинг на IIS7. Невозможно получить доступ к ресурсам с обработчиками StaticFileModule

У меня есть каталоги изображений и стилей с Web.config файл (с использованием Orchard). В этом Web.config есть строка, вызывающая проблему на моем общем хостинге (отлично работает в WebMatrix):

  <system.webServer>
    <handlers accessPolicy="Script,Read">
      <!--
      iis7 - for any request to a file exists on disk, return it via native http module.
      accessPolicy 'Script' is to allow for a managed 404 page.
      -->
      <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />
    </handlers>
  </system.webServer>

Когда я пытаюсь получить доступ к любым файлам из этого каталога, я получаю страницу 500:

внутренняя ошибка сервера 500.
Возникла проблема с ресурсом, который вы ищете, и он не может быть отображен.

Когда я удаляю строку

<add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read" />

он отображает ресурсы.

Как я могу исправить эту проблему, не изменяя Web.config файл, расположенный в каждом каталоге, содержащем файлы, к которым предполагается прямой доступ?

Я не думаю, что вы можете (я имею в виду на виртуальном хостинге).

Ошибка ясно говорит: «Невозможно добавить повторяющуюся запись коллекции типа« добавить »с уникальным ключевым атрибутом« name », установленным на« StaticFile ». Это означает, что уже есть запись с name="StaticFile" где-то выше в иерархии конфигураций (в другом web.config в родительской папке .. или, скорее всего, в глобальном конфиге веб-сервера.

Чтобы решить эту проблему, вам нужно сначала удалить существующую строку конфигурации. Вы должны добавить <remove name="StaticFile" /> линия в ваш <handlers> перед добавлением собственного обработчика, например:

<system.webServer>
    <handlers accessPolicy="Script,Read">
        <remove name="StaticFile" />
        <!--
        iis7 - for any request to a file exists on disk, return it via native http module.
        accessPolicy 'Script' is to allow for a managed 404 page.
        -->
        <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" preCondition="integratedMode" resourceType="File" requireAccess="Read"/>
    </handlers>
</system.webServer>

Если у вас будет полный контроль над своим сервером (чего у вас нет, поскольку вы находитесь на общем хостинге), вы можете удалить StaticFile обработчик из глобальной конфигурации IIS ... но разумно ли это ?? Добавление <remove...> line - правильный подход для обоих сценариев.