запретить список каталогов с помощью htaccess

105

У меня есть папка, например: /public_html/Davood/ и слишком много подпапку в папке, например: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/, ...

Я хочу добавить файл htaccess в /public_html/Davood/Чтобы запретить список каталогов /Davoodи подпапок, это возможно?

DJafari
источник
4
Я не понимаю, почему Options All -Indexesне сработало, как в нескольких ответах!
Fr0zenFyr 02
1
@ Fr0zenFyr это зависит от конфигурации веб-сервера, если AllowOverride Allработает
DJafari

Ответы:

126

Параметры -Indexes должны работать, чтобы предотвратить списки каталогов.

Если вы используете файл .htaccess, убедитесь, что у вас есть хотя бы параметр «allowoverride options» в вашем основном файле конфигурации apache .

PPC-Кодер
источник
1
это ничего не меняет
минхаджул
70

Попробуйте добавить это в .htaccessфайл в этом каталоге.

Options -Indexes

Здесь есть дополнительная информация.

Брайан Дрюери
источник
Ага, я думал -индексы отключили списки каталогов, вместо этого он блокирует весь контент из папки ... Кто-нибудь знает почему?
Майкл Февер
Все, что я могу думать, это проблема с конфигурацией сервера. Попробуйте включить rewriteмодуль и настройку каталога на AllowOverride All. Если все это уже на месте, и то, что вы прокомментировали, правда, мне, должно быть, слишком повезло, что я смог Options All -Indexesработать в каждом проекте на разных серверах.
Fr0zenFyr 02
35

Если Options -Indexesне работает, как предложил Брайан Древери, вы можете написать рекурсивный метод для создания пустых файлов index.php.

Поместите это в свою базовую папку, которую вы хотите защитить, вы можете назвать ее как угодно (я бы рекомендовал index.php)

<?php

recurse(".");

function recurse($path){
    foreach(scandir($path) as $o){
        if($o != "." && $o != ".."){
            $full = $path . "/" . $o;
            if(is_dir($full)){
                if(!file_exists($full . "/index.php")){
                    file_put_contents($full . "/index.php", "");
                }
                recurse($full);
            }
        }
    }
}

?>

Эти пустые файлы index.php можно легко удалить или перезаписать, и они не позволят вашим каталогам отображаться в списке.

Циклон
источник
8
Хотя пустой файл - не такая уж большая проблема, лучшим решением может быть использование символических ссылок , таким образом, это сэкономит немного места, и ему нужно будет изменить только 1 файл, если он выберет отображение какого-то единого сообщения. вместо пустой страницы.
daalbert
19

Чтобы отобразить Запрещенную ошибку, включите эти строки в файл .htaccess:

Options -Indexes 

Если мы хотим проиндексировать наши файлы и показать их с некоторой информацией, используйте:

IndexOptions -FancyIndexing

Если мы хотим, чтобы какое-то конкретное расширение не отображалось, тогда:

IndexIgnore *.zip *.css
Вивек
источник
1
.httaccessили .htaccess?
NaveenDA
8

Options -Indexes у меня отлично работает,

вот .htaccessфайл:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes <---- This Works for Me :)
    </IfModule>


   ....etc stuff

</IfModule>

Перед : введите описание изображения здесь

После :

введите описание изображения здесь

Саураб Мистри
источник
5

Есть два способа:

  1. используя .htaccess: Options -Indexes

  2. создать пустой index.html

Чакка
источник
3
Options -Indexes

Мне нужно попытаться создать файл .htaccess в этом текущем каталоге, который я хочу запретить в списке индекса каталогов. Но, извините, я не знаю о рекурсивном коде .htaccess.

Попытайся.

Джерси Уильям
источник
2

Согласен что

Options -Indexes

должен работать, если основной сервер настроен на разрешение переопределения параметров, но если нет, это скроет все файлы из списка (так что каждый каталог будет пустым):

IndexIgnore *
dashrb
источник
2

Параметры -Indexes возвращают ошибку 403 запрещено для защищенного каталога. Такое же поведение может быть достигнуто с помощью следующего перенаправления в htaccess:

RedirectMatch 403 ^/folder/?$ 

Это вернет запрещенную ошибку для example.com/folder/ .

Вы также можете использовать мод-перезапись, чтобы запретить запрос папки.

RewriteEngine on

RewriteRule ^folder/?$ - [F]

Если ваш Htaccess находится в папке , которую вы собираетесь запретить, шаблон изменения RewriteRule от ^ папки /? $ В ^ $ .

Амит Верма
источник