Проблема просмотра каталога 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, ему возвращается список каталогов.
Есть много возможностей, но то, с чем я столкнулся и исправил это, как показано ниже.
.NET Framework в IIS не совпадает с тем, который указан в web.config. Измените структуру в IIS на ту, которую создал проект. (если созданный проект или решение 4.5/4.0, измените IIS на 4.0 в настройках продвижения вашего сайта.)
Проверьте, чтобы теги в web.config были закрыты правильно для всех узлов.
Это должно работать!
Спасибо ананд
Причина, по которой это поведение отличается от IIS6, заключается в том, что IIS6 сохранил свойство для разрешения просмотра каталога в свойстве IIS6 Metabase DirBrowseFlags виртуального каталога, которое имеет уникальную запись для каждого виртуального каталога, тогда как в IIS7 это свойство теперь сохраняется только в Web.config
файл:
<system.webServer>
<!-- ... -->
<directoryBrowse enabled="true" />
</system.webServer>
Поскольку оба ваших виртуальных каталога в IIS7 совместно используют один и тот же физический каталог, они оба имеют один и тот же Web.config
файл, и поэтому вы обнаружите, что изменение свойства в одном приводит к тому, что изменение появляется в другом, так как они оба изменяют одно и то же Web.config
файл.
(На данный момент я не знаю хорошего обходного пути для IIS7 для вас.)