You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 7 Next »
默认情况下,gf Server关闭了静态文件服务的功能,如果开发者配置了静态文件目录,那么静态文件服务将会自动开启。
gf Server
静态文件服务涉及到的常用配置方法如下:
// 设置http server参数 - ServerRoot func (s *Server) SetServerRoot(root string) // 添加静态文件搜索目录,必须给定目录的绝对路径 func (s *Server) AddSearchPath(path string) // 设置http server参数 - IndexFiles,默认展示文件,如:index.html, index.htm func (s *Server) SetIndexFiles(index []string) // 是否允许展示访问目录的文件列表 func (s *Server) SetIndexFolder(enabled bool) // 添加URI与静态目录的映射 func (s *Server) AddStaticPath(prefix string, path string) // 静态文件服务总开关:是否开启/关闭静态文件服务 func (s *Server) SetFileServerEnabled(enabled bool) // 设置URI重写规则 func (s *Server) SetRewrite(uri string, rewrite string) // 设置URI重写规则(批量) func (s *Server) SetRewriteMap(rewrites map[string]string)
简要介绍:
IndexFiles
SetIndexFolder
true
index.html, index.htm
SetServerRoot
SearchPath
AddSearchPath
AddStaticPath
URI
SetRewrite
SetRewriteMap
nginx
rewrite
设置静态文件服务的目录路径时,可以使用绝对路径,也可以使用相对路径,例如设置当前运行目录提供静态文件服务可以使用SetServerRoot(".")。
SetServerRoot(".")
开发者可以设置多个文件目录来提供静态文件服务,并且可以设置目录及URI的优先级,但是一旦通过SetFileServerEnabled关闭了静态服务,所有静态文件/目录的访问都将失效。
SetFileServerEnabled
package main import "github.com/gogf/gf/frame/g" // 静态文件服务器基本使用 func main() { s := g.Server() s.SetIndexFolder(true) s.SetServerRoot("/Users/john/Temp") s.AddSearchPath("/Users/john/Documents") s.SetPort(8199) s.Run() }
package main import "github.com/gogf/gf/frame/g" // 静态文件服务器,支持自定义静态目录映射 func main() { s := g.Server() s.SetIndexFolder(true) s.SetServerRoot("/Users/john/Temp") s.AddSearchPath("/Users/john/Documents") s.AddStaticPath("/my-doc", "/Users/john/Documents") s.SetPort(8199) s.Run() }
静态目录映射的优先级按照绑定的URI精准度进行控制,绑定的URI越精准(深度优先匹配),那么优先级越高。
package main import "github.com/gogf/gf/frame/g" // 静态文件服务器,支持自定义静态目录映射 func main() { s := g.Server() s.SetIndexFolder(true) s.SetServerRoot("/Users/john/Temp") s.AddSearchPath("/Users/john/Documents") s.AddStaticPath("/my-doc", "/Users/john/Documents") s.AddStaticPath("/my-doc/test", "/Users/john/Temp") s.SetPort(8199) s.Run() }
其中,访问/my-doc/test的优先级会比/my-doc高,因此假如/Users/john/Documents目录下存在test目录(与自定义的/my-doc/test冲突),将会无法被访问到。
/my-doc/test
/my-doc
/Users/john/Documents
test
gf框架的静态文件服务支持将任意的URI重写,替换为制定的URI,使用SetRewrite/SetRewriteMap方法。
gf
SetRewrite/SetRewriteMap
示例,在/Users/john/Temp目录下只有两个文件test1.html及test2.html。
/Users/john/Temp
test1.html
test2.html
func main() { s := g.Server() s.SetServerRoot("/Users/john/Temp") s.SetRewrite("/test.html", "/test1.html") s.SetRewriteMap(g.MapStrStr{ "/my-test1": "/test1.html", "/my-test2": "/test2.html", }) s.SetPort(8199) s.Run() }
执行后,
/test.html
/my-test1
/my-test2