如何从 Apache 目录列表中的根文件夹中删除'Parent Directory'链接



如何允许在Apache中列出特定(根)文件夹及其子文件夹的目录,但不显示指向该根文件夹父文件夹的链接。当用户位于子文件夹中时,会显示"父目录"链接以导航到其父目录,但当用户位于根文件夹时,我需要删除/隐藏此"父目录"链接,这样用户就无法移动到该"根"层次结构之上。

您可以通过在.htaccess文件中添加以下内容来隐藏"父目录"链接:

IndexIgnore ..

但这将为每个目录隐藏它。

如果您可以访问httpd配置,您可以尝试从每个服务器上下文中删除该指令:

<DirectoryMatch "^/(?!var/www/your-root/subfolder)">
...
</DirectoryMatch>

只要在较高的文件夹中没有IndexIgnore指令,它就应该适用于您。

我刚刚遇到了同样的问题,这是第一个搜索结果,所以我想分享我的解决方案。在我的情况下,我无法访问httpd-configs,所以我采用了不同的方法。

因为我不会维护索引目录树,所以我需要一个解决方案,该解决方案可以只存在于索引根中,而不需要对其子目录有任何特定的了解。但是,它确实使用了指向索引根的绝对路径,所以如果父文件夹结构发生了很大变化,它可能不适合您。

我想到的是使用CSS URL属性选择器来隐藏指向索引根的父目录的"父目录"链接。它留下了一行空白,但至少它不像用户多次单击"父目录"时出现的"403禁止"错误那样令人生畏。

理论上,修复应该像在索引根的.htaccess文件中添加一行一样简单:

IndexHeadInsert "<style type="text/css">a[href="/absolute/path/to/index/root/parent/"] {display: none;}</style>"

然而,这个简单的解决方案似乎在IE中不起作用,因为Apache吐出的html的默认doctype太旧了,无法使用属性选择器。

相反,我们必须使用htaccess文件中的HeaderName和ReadmeName关键字,用我们自己的doctype来包围Apache生成的代码。我选择了HTML5 doctype,尽管可能有一个更合适的doctype。

.htaccess文件:

Options +Indexes
IndexIgnore "_index_header.html" "_index_footer.html"
HeaderName "/absolute/path/to/root/index/_index_header.html"
ReadmeName "/absolute/path/to/root/index/_index_footer.html"
IndexOptions +SuppressHTMLPreamble

_index_header.html文件:

<!DOCTYPE html>
<html>
    <head>
        <title>title</title>
        <style type="text/css">
            a[href="/absolute/path/to/index/root/parent/"] {display: none;}
        </style>
    </head>
    <body>

_index_footer.html文件:

    </body>
</html>

(注意CSS选择器指向索引根的父级)

适用于我测试过的所有最新浏览器版本(FF、IE、Chrome、Safari、Opera),也可以一直返回到IE7。

此外,既然您已经经历了创建这些文件的所有麻烦,那么您还可以让索引更加时髦。mod_autoindex上的apache文档除了可以使用CSS之外,还有一系列可以用来调整的选项。

我的解决方案如下:

<Directory "/www"> Options +Indexes IndexIgnore .. _other </Directory>
<DirectoryMatch "^/www/download/.{1,}"> IndexIgnoreReset ON IndexIgnore _other </DirectoryMatch>

似乎你问的问题不对。

如果你的目的是防止用户访问上层目录,那么删除链接不会解决任何问题,因为任何人都可以简单地从URL中删除最后一个目录。

例如,如果您的子文件夹是/var/www/secret/hive/subfolderDocumentRoot设置为/var/www,并且您共享链接http://your.example.com/secret/hive/subfolder,则即使没有"父文件夹"链接,任何人都可以访问http://your.example.com/secret/http://your.example.com/secret/hive

你能做的是:

  • 将"empty"index.html放在"subfolder"上方的每个文件夹中。Apache将提供文件而不是列表,这样用户就不知道"秘密"或"蜂窝"中有什么。

  • 禁止在"子文件夹"上方的每个文件夹中列出。Apache将拒绝显示这样用户就不会知道"秘密"或"蜂巢"中有什么了。

然而,如果用户能够以某种方式猜测文件的名称,他们仍然可以组装一个有效的URL,如http://your.example.com/secret/password.txt,如果运气好(和/或尝试),他们仍然能够获得一些非公开信息。

应该做的是:

  • DocumentRoot设置为/var/www/secret/hive/subfolder

  • 或者(最好)保留DocumentRoot,但将所有非公共移出/var/www

因此CCD_ 11将只显示公共信息,并且用户甚至无法(HTTP)向请求任何上述信息。

有一个解决这个问题的有效技巧,通过JQuery检查url路径名。只需在.htaccess文件的顶部添加此代码(显然我们无法在此处分隔段落行):

IndexHeadInsert "<script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script><script>$(document).ready(function(){if(document.location.pathname.split('/').length<4){$('tr:nth-of-type(2)').hide();}});</script>"

注:

  • 您可能需要更改路径名长度值,在我的站点中为"4",因为我的存档根目录在辅助子目录中启动(如果您的存档根文件在主根目录中启动,请尝试不同的值,例如"3"或"2",或者只需先检查您的位置。路径名长度即可)。

  • "tr:nth of type(2)"css指向第二条记录,如果url位置是我们的主根,那么它应该管理我们想要隐藏的"父目录"。

玩得开心!

有关更多说明。。。让我们从目录.htaccess文件中控制这些东西,即存在于目标目录中的.htacccess文件。它可能采用以下配置:

# STRONG HTACCESS PROTECTION
<Files ~ "^.*.([Hh][Tt][Aa])">
 order allow,deny
 deny from all
</Files>
<IfModule mod_autoindex.c>
            Options Indexes FollowSymLinks 
            IndexIgnore ".." #LOOK AT THIS LINE     
            IndexOptions FancyIndexing
            IndexOptions VersionSort
           # IndexOptions HTMLTable
            IndexOptions FoldersFirst
            IndexOptions IconsAreLinks
            IndexOptions IgnoreCase
           # IndexOptions SuppressDescription
            AddDescription "Last generated backup result" backuplog.txt
            IndexOptions SuppressHTMLPreamble
            IndexOptions XHTML
            IndexOptions IconWidth=32
            IndexOptions IconHeight=32
            IndexOptions NameWidth=*
            IndexOrderDefault Descending Name
            HeaderName /index-style/header.html
            ReadmeName /index-style/footer.html
        </ifModule>

为了隐藏父目录链接,IndexIgnore应该按照上面的代码所示编写。上面的代码段已经用Apache2.4.18进行了测试。

相关内容

最新更新