gorilla mux不包括扩展请求

gorilla mux不包括扩展请求,go,gorilla,Go,Gorilla,尝试使用github.com/gorilla/mux配置go服务器路由,以index.html响应所有请求,但排除扩展名为.jpg |.js |.png的请求 由于扩展名而被排除的静态文件将被路由到文件服务器。配置 尝试失败 func main() { r := mux.NewRouter() r.HandleFunc("/{path:^.*([!js|jpg|png|gif])$}", func(w http.ResponseWriter, r *http

尝试使用
github.com/gorilla/mux
配置go服务器路由,以index.html响应所有请求,但排除扩展名为.jpg |.js |.png的请求

由于扩展名而被排除的静态文件将被路由到文件服务器。配置

尝试失败

  func main() {
        r := mux.NewRouter()

        r.HandleFunc("/{path:^.*([!js|jpg|png|gif])$}", func(w http.ResponseWriter, r *http.Request) {
            http.ServeFile(w, r, "dist/index.html")
        })

        r.PathPrefix("/").Handler(http.StripPrefix("/", http.FileServer(http.Dir("dist"))))

        http.Handle("/", r)
        http.ListenAndServe(":8000", nil)
    }
“^.*([!js | jpg | png | gif])$}”
不是没有.jpg |.js |.png的匹配字符串的有效常规支出

然而,在golang中,由于技术原因,不支持负前瞻,特别是因为它与库的O(n)时间保证冲突


我建议你用另一种方法来处理ie,为png、js、css文件等添加处理程序,以便为文件提供服务。欢迎使用更好的方法,希望使用正则表达式,以便在没有疯狂的if/else条件的情况下保持原样

func main() {
    r := mux.NewRouter()

    r.HandleFunc("/{path:.*}", func(w http.ResponseWriter, r *http.Request) {
        if HasSuffix(r.URL.Path, []string{"js", "css", "gif", "jpeg", "woff2", "woff", "ttf"}) == false {
            fmt.Println("serving index")
            http.ServeFile(w, r, "dist/index.html")
        } else {
            http.ServeFile(w, r, "dist/"+r.URL.Path)
        }
    })

    //r.PathPrefix("/").Handler(http.StripPrefix("/", http.FileServer(http.Dir("dist"))))

    http.Handle("/", r)
    http.ListenAndServe(":8000", nil)
}

//HasSuffix check if url has suffix
func HasSuffix(path string, parts []string) bool {
    for _, part := range parts {
        fmt.Println("checking if part:" + part + " exists in path:" + path)
        if strings.HasSuffix(path, part) == true {
            return true
        }
    }
    return false
}