如何创建一个简单的index.html文件来列出所有文件/目录?

zlhcx6iw  于 2023-01-15  发布在  其他
关注(0)|答案(8)|浏览(1155)

我们使用的Web服务器不允许目录列表。
有一个特定的目录,我想允许列出。
怎样才能使一个简单的HTML文件,将包含这个目录的内容?

zrfyljdw

zrfyljdw1#

在apache或其他web服务器中显式禁用自动目录索引有足够的理由,或者,例如,你可能只想在索引中包含某些文件类型,在这种情况下,你可能仍然想为特定的文件夹静态生成一个index.html文件。

一个月一个月

tree是一个最简单的实用程序,可在大多数类Unix系统上使用(ubuntu/debian:sudo apt install tree,MAC地址:brew install tree,窗口:tree可以生成纯文本、XML、JSON或HTML输出。
生成一个深一级的HTML目录索引:

tree -H '.' -L 1 --noreport --dirsfirst -T 'Downloads' -s -D --charset utf-8 -o index.html

仅包括与glob模式匹配的特定文件类型,例如*.zip文件:

tree -H '.' -L 1 --noreport --charset utf-8 -P "*.zip" -o index.html

-H的参数将用作基本href,因此您可以传递相对路径(如.)或Web根目录的绝对路径(如/files)。-L 1将列表仅限于当前目录。--dirsfirst将目录放在第一位,-T设置自定义标题,-s包括文件大小,-D包括修改后的**日期。
tree没有在HTML页脚中公开一个标志来禁用片尾,但是您可以通过sed来删除它:

# delete 7 lines starting with the line matching <hr>
tree -H '.' -L 1 --noreport --charset utf-8 | sed -e '/<hr>/,+7d' > index.html

有关所有支持的选项,请参见shell中的tree --help或**man tree**。

递归遍历的生成器脚本

我需要一个索引生成器,我可以风格的方式,我想要的,这也将包括文件大小,所以最后写的是this script(python3),它除了具有可定制的样式之外还可以在所有嵌套的子目录中递归地生成index.html文件(带有--recursive-r标志)。样式大量借用了caddyserver的file-server模块。它包括最后修改时间,并在移动的视口中响应。

oug3syen

oug3syen2#

对我来说,PHP是最简单的方法:

<?php
echo "Here are our files";
$path = ".";
$dh = opendir($path);
$i=1;
while (($file = readdir($dh)) !== false) {
    if($file != "." && $file != ".." && $file != "index.php" && $file != ".htaccess" && $file != "error_log" && $file != "cgi-bin") {
        echo "<a href='$path/$file'>$file</a><br /><br />";
        $i++;
    }
}
closedir($dh);
?>

把这个放在你的目录下,然后设置你想让它在$path中搜索的位置。第一个if语句将隐藏你的php文件和.htaccess以及错误日志。然后它将显示带有链接的输出。这是非常简单的代码,很容易编辑。

nkkqxpd9

nkkqxpd93#

您可以:编写一个服务器端脚本页面,如PHP、JSP、www.example.com等,以动态生成此HTMLASP.net etc to generate this HTML dynamically

设置您正在使用的Web服务器(例如Apache),以便为不包含欢迎页的目录(例如index.html)自动执行此操作

或添加自动索引模式:http://httpd.apache.org/docs/current/mod/mod_autoindex.html

noj0wjuj

noj0wjuj4#

有一个免费的php脚本,由赛扬花花公子,可以做到这一点称为赛扬花花公子索引器2。它不需要.htaccess的源代码很容易理解,并提供了一个很好的起点。
这里有一个下载链接:https://gitlab.com/desbest/celeron-dude-indexer/

sy5wg1nm

sy5wg1nm5#

您是否尝试通过.htaccess对此目录允许它?

Options +Indexes

我将此选项用于提供程序禁用目录列表的某些目录

mec1mxoz

mec1mxoz6#

如果您的临时服务器启用了目录列表,则可以将index.html复制到生产服务器。
例如:

wget https://staging/dir/index.html

# do any additional processing on index.html

scp index.html prod/dir
093gszye

093gszye7#

这不能用纯HTML来完成。
然而,如果你可以访问Apache服务器上的PHP(你标记了“apache”),这可以很容易地做到-se the PHP glob function.如果没有-你可以尝试服务器端包含-这是Apache的东西,我不知道它很多.

bqujaahr

bqujaahr8#

如果你有node,那么你可以像this answer一样使用fs来获取所有的文件:

const { resolve } = require('path'),
  { readdir } = require('fs').promises;

async function getFiles(dir) {
  const dirents = await readdir(dir, { withFileTypes: true });
  const files = await Promise.all(dirents.map((dirent) => {
    const res = resolve(dir, dirent.name);
    return dirent.isDirectory() ? getFiles(res) : res;
  }));
  return Array.prototype.concat(...files);
}

你可以这样使用它:

const directory = "./Documents/";
  
getFiles(directory).then(results => {
  const html = `<ul>` +
  results.map(fileOrDirectory => `<li>${fileOrDirectory}</li>`).join('\n') +
  `</ul>`;

  process.stdout.write(html);
  // or you could use something like fs.writeFile to write the file directly
});

您可以在命令行中调用它,如下所示:

$ node thatScript.js > index.html

相关问题