Как отключить просмотр каталога в Web.Config
У меня есть WebSite, и я люблю как Запретить браузер каталогов из файла web.config.
Здесь код, который я использую, помещен в ROOT.
Не работает. Я тестирую его локально, так что с URL LIKE http://localhost:3214/ Я все же могу просматривать каталог для CMS.
- Что я делаю неправильно?
- Должен ли он работать даже на локальной машине?
Спасибо за вашу поддержку!
<configuration>
<location path="Cms">
<system.webServer>
<directoryBrowse enabled="false" />
</system.webServer>
</location>
</configuration>
Некоторые ресурсы:
http://blogs.iis.net/bills/archive/2008/03/24/how-to-enable-directory-browsing-with-iis7-web-config.aspx
http://www.expta.com/2008/03/configuring-virtual-directories-with.html
Ответы
Ответ 1
Во-первых: не все работает в блоке <location>
.
Я не могу найти положительное утверждение, что <system.webServer>
не поддерживается в <location>
, но я не могу найти случаи, когда предполагается, что это разрешено. Доказательства этого в (глобальном) machine.config
, где раздел system.webserver
определен для использования обработчика IgnoreSection
: ie. он не обрабатывается стандартной реализацией System.Configuration
, и это стандартная реализация обработки конфигурации, которая обеспечивает поддержку <location>
.
Попробуйте добавить web.config
в папку Cms
с элементом directoryBrowse
, чтобы подтвердить, что просмотр заблокирован.
Ответ 2
Гиббок, здесь нет ничего плохого, не паникуйте:)
Предполагая, что вы просматриваете свой сайт со встроенного сервера внутри Visual Studio, это обычно нормальный случай.
Я уверен, что если вы перейдете в IIS с указанным выше кодом, просмотр в каталогах будет вести себя так же, как вы хотите.
Попробуйте и разместите этот сайт в IIS и сообщите нам, что произошло, спасибо.
Ответ 3
<directoryBrowse> директива управляет списком каталога только через протокол http:
http://msdn.microsoft.com/en-us/library/ms691327%28v=vs.90%29.aspx
Он не будет влиять на код, пытаясь получить доступ к каталогу из любого другого (или даже собственного) приложения.
@Edit: после редактирования, и если я получу вас правильно, я думаю, что вы подразумеваете под Deny Directory Browser - это назначенная функциональность: покажите содержимое каталога в указанном пути с помощью браузера. И да, вероятно, он не будет работать на локальном сервере разработки. Попробуйте на IIs!
Ответ 4
Я пытался использовать тот же код. То, что у вас есть, на самом деле правильное. Вот reference.
Конечно, это не работало для меня, и я не мог понять, почему, пока я не прочитал сообщение Ричарда и не вспомнил, что кто-то поместил файл web.config в этот каталог. Этот файл переопределяет поведение в главном файле web.config. В подкаталоге web.config была включена опция directoryBrowse (а также много других обработчиков yikes!). Удалите этот файл и то, что у вас выше, работает для меня. Он фактически передает запрос следующему обработчику, что именно то, что я хотел.
Я использую IIS 7 на своей локальной машине.