Проблема просмотра каталога IIS в виртуальном каталоге

У меня есть две разные виртуальные каталоги, сопоставленные с одним и тем же каталогом в ОС. В одном из этих виртуальных каталогов мне нужно отключить просмотр папок, а в другом - включить его.

Проблема в том, что когда я менял одну из них, менялась и другая. Я думаю, что эта проблема связана с тем, что оба виртуальных каталога указывают на одну и ту же папку в ОС, но с IIS6 у меня была такая же конфигурация без проблем.

Есть идеи обойти это?

Спасибо!

3 ответа

IIS 7 действительно использует файл web.config в каталогах для настройки, однако вы также можете отказаться от использования файла web.config (т.е. не использовать инструмент IIS Manager) и вместо того, чтобы разрешить просмотр каталогов через IIS Manager, просто отредактируйте your applicationHost.config для настройки просмотра каталогов в единственном виртуальном каталоге, для которого вы на самом деле хотите включить просмотр. Это позволит вам просматривать в одном виртуальном каталоге, но не в другом, даже если оба указывают на один и тот же физический каталог.

Вот пример: отредактируйте файл applicationHost.config. Этот файл находится в вашем каталоге %WINDIR%\System32\inetsrv\config.

1) Перейти в конец файла. Вы должны найти закрывающий тег XML для раздела конфигурации:

</configuration>

2) над этим тегом добавьте тег местоположения, используя в качестве руководства следующее:

 <location path="{website name}/{path to virtual directory}">
      <system.webServer>
           <directoryBrowse enabled="true" />
      </system.webServer>
 </location>

Замените {имя веб-сайта} на имя веб-сайта (как видно в диспетчере IIS) для рассматриваемого веб-сайта, а {путь к виртуальному каталогу} - на путь к виртуальному каталогу, который вы хотите просматривать. Пример:

<location path="MyWebsite/imagelist">

Теперь допустим, что в приведенном выше примере imagelist - это виртуальный каталог, который указывает на {your webroot}/pics, а у вас есть еще один виртуальный каталог с именем images, который также указывает на {your webroot}/pics. Когда посетитель заходит на yoursite.com/images, он не видит список изображений, но когда он заходит на yoursite.com/imagelist, ему возвращается список каталогов.

Есть много возможностей, но то, с чем я столкнулся и исправил это, как показано ниже.

  1. .NET Framework в IIS не совпадает с тем, который указан в web.config. Измените структуру в IIS на ту, которую создал проект. (если созданный проект или решение 4.5/4.0, измените IIS на 4.0 в настройках продвижения вашего сайта.)

  2. Проверьте, чтобы теги в web.config были закрыты правильно для всех узлов.

Это должно работать!

Спасибо ананд

Причина, по которой это поведение отличается от IIS6, заключается в том, что IIS6 сохранил свойство для разрешения просмотра каталога в свойстве IIS6 Metabase DirBrowseFlags виртуального каталога, которое имеет уникальную запись для каждого виртуального каталога, тогда как в IIS7 это свойство теперь сохраняется только в Web.config файл:

<system.webServer>
    <!-- ... -->
    <directoryBrowse enabled="true" />
</system.webServer>

Поскольку оба ваших виртуальных каталога в IIS7 совместно используют один и тот же физический каталог, они оба имеют один и тот же Web.config файл, и поэтому вы обнаружите, что изменение свойства в одном приводит к тому, что изменение появляется в другом, так как они оба изменяют одно и то же Web.config файл.

(На данный момент я не знаю хорошего обходного пути для IIS7 для вас.)

Другие вопросы по тегам