Apache Dir列表

时间:2009-12-10 10:37:58

标签: php apache

我想允许某些导演的目录列表,但我想阻止任何下载。

基本上dir结构是

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

子目录中的文件是.zip文件。

我希望用户能够查看子目录的内容,但不允许任何下载。

我在网上搜索但无法找到任何相关信息。

在预先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点

  1. 使用上面提到的RedirectMatch
  2. 使用mod_rewrite重写对index.php的所有调用
  3. 将文件夹移到文档根目录之外,并根据脚本工作显示该文件夹
  4. 第二个和第三个选项将要求您编写脚本以列出文件夹内容。您可以在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();
    ?>
    

    第三个选项需要Web服务器上的最小权限。它的工作原理如下:

    1. 您的网站位于服务器文件夹/ home / you / public_html中。您将文件夹放在/ home / you / uploads
    2. 想要查看folde内容的客户进入页面www.yourdomain.com/folder.php?folder=xxx
    3. 将PHP变量的“文件夹”值(xxx)映射到文件夹名称
      • 你必须确保XX不像../../../etc,这将列出etc文件夹的内容。使用映射表(1 =&gt; yourfolder1等)或确保所有内容都发生在uploads文件夹中。
    4. 列出文件夹条目,最终提供指向子文件夹的链接(www.yourdomain.com/folder.php?folder=yyy等)
    5. 你看:)。
    6. 第三个选项(mod重写)基本相同,但文件夹名称由mod重写模块给出(重写规则将www.yourdomain.com/uploads/xxx转换为www.yourdomain.com/folder.php ?夹= XXX)

      总结:

      第一个选项禁止通过将文件名重定向到某个文件(例如yourdomain.com/403.php)来下载文件名。它依靠Web服务器来显示列表,让他处理其余的事情。

      第二种和第三种方法(可能由c组合)创建自己的目录列表。如果您想在其中应用某些布局,这是唯一的选择。建议的方法是将文件夹放在文档根目录之外,这样即使您的脚本失败,用户也无法下载任何文件(对于Web服务器,不会有这样的文件,因为它们在文档根目录之外)。您必须确保不允许用户在您的服务器上显示任何文件夹(这很危险)。

答案 1 :(得分:0)

使用RedirectMatch语句阻止对与正则表达式匹配的任何目录或文件的访问,并将其发送到某个URL。最好将它们发送到他们目前正在浏览的网址。

RedirectMatch regex url