拒绝使用 htaccess 列出目录

Posted

技术标签:

【中文标题】拒绝使用 htaccess 列出目录【英文标题】:deny directory listing with htaccess 【发布时间】:2011-08-21 10:01:17 【问题描述】:

我有一个文件夹,例如:/public_html/Davood/ 并且文件夹中的子文件夹太多,例如:/public_html/Davood/Test1//public_html/Davood/Test1/Test//public_html/Davood/Test2/,...

我想在/public_html/Davood/中添加一个htaccess文件来拒绝/Davood和子文件夹中的DirectoryListing,可以吗?

【问题讨论】:

我不明白为什么Options All -Indexes 没有像几个答案那样工作! @Fr0zenFyr 这取决于网络服务器配置,如果 AllowOverride All 有效 Options -Indexes 是一个很好的解决方案。但是还有多种其他解决方案可以与 htaccess 一起使用来拒绝目录列表.. 请参阅此处helponnet.com/2021/07/29/apache-disable-directory-listing 【参考方案1】:

尝试将此添加到该目录中的.htaccess 文件中。

Options -Indexes

This 有更多信息。

【讨论】:

是的,我认为 -Indexes 禁用了目录列表,而是阻止了文件夹中的所有内容......有人知道为什么吗? 我能想到的只是服务器配置有问题。尝试启用rewrite 模块,并将目录设置为AllowOverride All。如果一切都已经到位,并且您评论的是真的,那么我一定很幸运能够让Options All -Indexes 在不同服务器上的每个项目中工作。 如果只有Options -Indexes 在某些服务器中可能是错误 500。应该有一些条件(if)来防止这种情况发生。【参考方案2】:

Options -Indexes 应该可以防止目录列表。

如果您使用的是 .htaccess 文件,请确保您的主 apache config file 中至少有“allowoverride options”设置。

【讨论】:

这不会改变任何事情【参考方案3】:

如果Options -Indexes 不像 Bryan Drewery 建议的那样工作,您可以编写一个递归方法来创建空白 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 文件可以很容易地删除或覆盖,它们会使您的目录无法列出。

【讨论】:

虽然空文件没什么大不了,但更好的解决方案可能是使用symbolic links,这样可以节省一点空间,如果他只需要修改一个文件他选择显示某种统一的信息而不是空白页。【参考方案4】:

为了显示 Forbidden 错误,请在您的 .htaccess 文件中包含这些行:

Options -Indexes 

如果我们想索引我们的文件并显示一些信息,那么使用:

IndexOptions -FancyIndexing

如果我们希望某些特定的扩展不显示,那么:

IndexIgnore *.zip *.css

【讨论】:

.httaccess.htaccess ? .htaccess 在根目录中。【参考方案5】:
Options -Indexes

我必须尝试创建我想要禁止目录索引列表的当前目录的 .htaccess 文件。但是,对不起,我不知道 .htaccess 代码中的递归。

试试看。

【讨论】:

【参考方案6】:

同意

Options -Indexes

如果主服务器配置为允许选项覆盖,应该可以工作,但如果没有,这将隐藏列表中的所有文件(因此每个目录都显示为空):

IndexIgnore *

【讨论】:

【参考方案7】:

Options -Indexes 为受保护的目录返回 403 禁止错误。通过在 htaccess 中使用以下重定向可以实现相同的行为:

RedirectMatch 403 ^/folder/?$ 

这将为 example.com/folder/ 返回一个禁止错误。

您也可以使用 mod-rewrite 来禁止对文件夹的请求。

RewriteEngine on

RewriteRule ^folder/?$ - [F]

如果您的 htaccess 在您要禁止的文件夹中,请将 RewriteRule 的模式从 ^folder/?$ 更改为 ^$

【讨论】:

【参考方案8】:

有两种方法:

    使用 .htaccess : Options -Indexes

    创建空白 index.html

【讨论】:

【参考方案9】:

Options -Indexes 非常适合我,

这里是.htaccess 文件:

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


   ....etc stuff

</IfModule>

之前:

之后:

【讨论】:

以上是关于拒绝使用 htaccess 列出目录的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess是什么

使用 .htaccess 拒绝访问目录中的所有 PHP 文件

301 重定向.htaccess

.htaccess 拒绝所有-> 目录索引不起作用(拒绝所有和白名单文件)

带有“全部拒绝”的.htaccess 文件是不是也拒绝子目录?

.htaccess 拒绝目录访问