Golang大猩猩希望在静态服务上落后于斜线

时间:2017-10-25 06:07:56

标签: 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)

问题是:只有GET / swagger-ui /返回swagger页面。 当我(大多数用户也期待)GET / swagger-ui没有尾随斜线时,我得到404.

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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

  

StrictSlash func(value bool)*路由器StrictSlash定义了结尾   削减新路线的行为。初始值为false。

     

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

     

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

     

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

     

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