2009-12-10 6 views
0

Я хочу разрешить список каталогов определенных каталогов, но я хочу заблокировать любые загрузки.Apache Dir Listing

В основном структура НАПРАВЛ

Nzbs -> Alt.binaries.mp3 -> Alt.binaries.tv -> Alt.binaries.multimedia

файлы в суб- директорий являются. zip-файлы.

Я хочу, чтобы пользователи могли просматривать содержимое вспомогательных устройств, но не разрешать загрузку.

Ive искал сеть, но не мог найти ничего подходящего.

Спасибо заранее, за любую помощь.

ответ

0

Используйте оператор RedirectMatch, чтобы заблокировать доступ к любому директорию или файлу, которая соответствует регулярному выражению, и отправить его на определенный URL-адрес. Вероятно, лучше всего отправить их на URL-адрес, который они просматривают в настоящее время.

RedirectMatch regex url 
1

Есть несколько способов сделать это

  1. Использование RedirectMatch упоминалось выше
  2. Использование mod_rewrite переписать все вызовы index.php
  3. Перемещение корневой папки вне документа и показать папку в результате работы скрипта

Опции второго и третьего потребуют от вас сценария для отображения содержимого папки. Это довольно простой скрипт, который вы можете найти в documentation of PHP

<?php 
$d = dir("/etc/php5"); 
echo "Handle: " . $d->handle . "\n"; 
echo "Path: " . $d->path . "\n"; 
while (false !== ($entry = $d->read())) { 
    echo $entry."\n"; 
} 
$d->close(); 
?> 

Третий вариант потребует наименьших привилегий на веб-сервере. Он работает следующим образом:

  1. Ваш сайт находится в папке сервера/home/you/public_html. Вы размещаете папку в/home/you/uploads
  2. Клиент, желающий увидеть содержимое складчатого листа, попадает на страницу www.yourdomain.com/folder.php?folder=xxx
  3. Вы указываете значение «папка» переменной PHP (xxx) в папку имя
    • Вы должны убедиться, что XX не похож ../../../etc, это отобразит содержимое папки etc. Либо используйте таблицу сопоставления (1 => yourfolder1 и т. Д.), Либо убедитесь, что все происходит внутри папки uploads.
  4. Вы список записей папок, в конечном счете, обеспечивает ссылки на вложенные папки (www.yourdomain.com/folder.php?folder=yyy и т.д.)
  5. Вы смотреть :)

Третий вариант (mod rewrite) в основном то же самое, но имя папки задается модулем перезаписи mod (правило перезаписи для преобразования www.yourdomain.com/uploads/xxx на www.yourdomain.com/folder.php?папка = ххх)

Резюмируя:

Первый вариант не позволяет загружать имена файлов, перенаправляя их в какой-то файл (например, yourdomain.com/403.php). Он использует веб-сервер для отображения списка и позволяет ему справляться с остальными.

Второй и третий метод (может быть объединен с c) создает свой собственный список каталогов. Если вы хотите, чтобы в нем был применен макет, это единственный вариант. Предлагаемый способ заключается в размещении папки вне корневого документа, поэтому пользователи не смогут загружать файлы, даже если ваш скрипт терпит неудачу (для веб-сервера таких файлов не будет, поскольку они находятся вне корневого документа). Вы должны убедиться, что пользователю не разрешено отображать ЛЮБУЮ папку на вашем сервере (это опасно).