如何使 Apache 的 mod_autoindex“AddDescription”指令仅对顶级目录起作用?

如何使 Apache 的 mod_autoindex“AddDescription”指令仅对顶级目录起作用?

我有一个大型文件系统,里面充满了文件,我使用 mod_autoindex 通过 apache2 来“共享”。

服务器的根级文件夹包含五个目录,我想对每个文件夹进行注释描述列位于根级别,并且仅在根级别。例如,根文件夹可能如下所示:

Index of /

Name       Last modified      Size   Description
george/    27-Feb-2011 15:50     -   
john/      27-Feb-2011 16:05     -   
paul/      19-Jun-2011 19:12     -   
pete/      12-Mar-2011 18:57     -   
ringo/     31-Oct-2011 18:42     -   

如果我添加AddDescription "Can't do a drum roll" /ringo/到 httpd.conf,什么也不会发生。

在使用 Google 搜索后,我发现应该删除前导斜杠。我添加了AddDescription "Can't do a drum roll" ringo/该描述,然后得到了“ringo”目录中每个文件和子目录的描述,而这并不是我想要的。

此外,我不认为这种描述与林戈/根级别列表中的文件夹,这正是我真正想要的。

我注意到,在 apache2 文档中,该指令中的文件描述符是“要描述的文件的文件扩展名、部分文件名、通配符表达式或完整文件名”,所以我明白为什么它要经过完整的目录结构,但我真正想要的是能够对五个顶级目录进行描述,而其他地方则没有。

我假设正则表达式不是语法的一部分,因为文档中没有提到它,而且它不起作用。请注意,文档说你需要前导斜杠,但事实并非如此。

答案1

如果DocumentRoot您的网站的 是/var/www,您可以尝试以下规则集:

AddDescription " " */www/*/ringo
AddDescription " " */www/ringo?*
AddDescription "Can't do a drum roll" */www/ringo

诀窍是使用" "(不匹配任何内容的文件/文件夹的默认内容)来使任何匹配ringo但位于更深的目录中或在 之后有后缀的文件/文件夹无效ringo

要了解详细解释,您必须了解 AddDescription 的实际规则,这有点复杂:

句法:AddDescription string file [file] ...

  • string不能为空。如果""提供,则会发生错误。

  • file可以包含通配符*ot ?。它们都可以匹配/

  • file以 开头/不匹配任何内容。

  • file包含/匹配所访问文件的整个路径的任何部分。

    • “完整路径”似乎是服务器上的绝对路径。例如,如果DocumentRoot某个网站的example.com/var/www,则该页面的完整路径http://example.com/myfolder/myfile.html/var/www/myfolder/myfile.html
    • 在这种情况下,file将隐式地在前面添加一个,*/以确保与指定的文件夹名称完全匹配。例如,myfolder/myfile.html实际上意味着*/myfolder/myfile.html,因此它匹配http://example.com/myfolder/myfile.html/var/www/myfolder/myfile.html)而不匹配http://example.com/prefixedmyfolder/myfile.html/var/www/prefixedmyfolder/myfile.html)。
    • 文件夹的文件名中没有尾随/。例如,myfolder/subfolder/( ) 与文件夹( )*/myfolder/subfolder/不匹配,但( ) 匹配。http://example.com/myfolder/subfolder/var/www/myfolder/subfoldermyfolder/subfolder*/myfolder/subfolder
  • 否则,file匹配所访问文件的文件名的任何部分。

    • 例如,hpin匹配http://example.com/phpinfo.php( phpinfo.php) 或http://example.com/subdir/phpinfo.php( phpinfo.php),并且不匹配http://example.com/phpinfo/whatever.php( whatever.php)。
  • 第一个匹配首先应用,并且任何后续匹配将被跳过。

參考文獻:Apache 2.4 文档

答案2

根级别的结构是否是静态的并且将具有这五个目录,并且只有这五个目录?

那么最简单的方法可能就是伪造它。只需创建一个看起来像是由 生成的静态 HTML 页面mod_autoindex。手动将描述添加到该静态页面。让其余页面由 生成mod_autoindex

答案3

另外删除尾部的斜杠,就完成了:

AddDescription "Can't do a drum roll" ringo

相关内容