http.browse

browse允许在指定的基本路径内进行目录浏览。它显示没有主文件(index file)的目录的文件列表,在其他服务器软件中,这通常称为索引(indexing)。

默认情况下,列举文件是被禁止的,如果访问目录(没有主文件)的请求将导致404错误。

该中间件可以通过设置cookie来保存用户更改的UI选项。

语法

browse [path [tplfile]]
  • path 用来匹配的基本路径。任何在这个基本路径的目录都是可以浏览的。
  • tplfile 使用的模板文件的路径。

如果没有指定模板文件,将使用默认模板。在没有任何参数的情况下,可以在整个站点上进行浏览(path=/)。

模板格式

模板就是一个简单的HTML文件,里面有一些操作。操作被解析并执行以显示动态内容。这个指令支持Caddy的模板操作以及一些browse指令的额外的操作。您可以使用呈现这些结构类型的模板操作(请注意,有些帮助方法是可用的)。

下面是一个相当简单的模板示例:

<html>
    <head>
        <title>{{html .Name}}</title>
    </head>
    <body>
        {{if .CanGoUp}}<a href="..">Up one level</a><br>{{end}}
        <h1>{{.Path}}</h1>
        {{range .Items}}
        <a href="{{html .URL}}">{{html .Name}}</a><br>
        {{end}}
    </body>
</html> 

... 然而默认的模板更有好。

注意,为了在浏览器中安全呈现,文件名和网址都经过了处理。模板被认为是受信任的,所以如果您的文件名不受信任,请确保它们是转义的,以便在HTML文档中使用。

JSON响应

可以通过在Accept头中使用application/json,要求返回JSON格式的内容而不是页面:

$ curl -H "Accept: application/json" 'localhost:2015/?limit=1'
[{"IsDir":true,"Name":".git","Size":476,"URL":".git/","ModTime":"2015-09-11T03:20:09+03:00","Mode":2147484141}]

上面的示例演示了如何请求JSON,以及如何通过名称为limit的查询条件限制所需条目的数量。要生成整个清单则需要去掉limit查询。

示例

允许目录列举所有缺少主文件的文件夹

browse

通过一个指定的模板展示相册内容(在/photos目录):

browse /photos ../photo_album.tpl