Golang gorilla 期望在静态服务上使用斜杠

Sub*_*bby 5 go gorilla

我想使用 gorilla/mux 和 http.FileServer 为 swagger-ui 提供服务。

这是迄今为止有效的路由:

router := mux.NewRouter()
router.PathPrefix("/swagger-ui/").Handler(http.StripPrefix("/swagger-ui/", 
http.FileServer(http.Dir("swagger-ui/"))))
http.ListenAndServe(":8080", router)
Run Code Online (Sandbox Code Playgroud)

问题是:只有 GET /swagger-ui/ 返回 swagger 页面。当我执行(大多数用户也期望)没有斜杠的 GET /swagger-ui 时,我得到 404。

如何解决这个问题?

m4r*_*c0s 3

您可能已经找到了答案,因为这个问题已经有近两年的历史了,但我将在这里写下答案,以便任何遇到这个问题的人都可以看到它。

您只需将 Gorilla 路由器定义为: router := mux.NewRouter().StrictSlash(true)

StrictSlash func(value bool) *Router StrictSlash 定义新路由的尾部斜杠行为。初始值为假。

当为 true 时,如果路由路径是“/path/”,则访问“/path”将执行到前者的重定向,反之亦然。换句话说,您的应用程序将始终看到路由中指定的路径。

当为 false 时,如果路由路径为“/path”,则访问“/path/”将不会匹配该路由,反之亦然。

重定向是 HTTP 301(永久移动)。请注意,当为具有非幂等方法(例如POST、PUT)的路由设置此项时,大多数客户端将随后的重定向请求作为GET 发出。使用中间件或客户端设置根据需要修改此行为。

特殊情况:当路由使用 PathPrefix() 方法设置路径前缀时,该路由将忽略严格斜杠,因为无法仅根据前缀确定重定向行为。但是,从该路由创建的任何子路由器都会继承原始的 StrictSlash 设置。