package site import ( "net/http" "path/filepath" "strings" ) type siteFS struct { fs http.FileSystem } func (sfs siteFS) Open(path string) (http.File, error) { f, err := sfs.fs.Open(path) if err != nil { if strings.HasSuffix(path, ".html") { return nil, err } htmlPath := path + ".html" f, err = sfs.fs.Open(htmlPath) if err != nil { return nil, err } } s, err := f.Stat() if err != nil { return nil, err } if s.IsDir() { index := filepath.Join(path, "index.html") if _, err := sfs.fs.Open(index); err != nil { closeErr := f.Close() if closeErr != nil { return nil, closeErr } return nil, err } } return f, nil }