• 静态文件服务配置
  • 示例1, 基本使用
  • 示例2,静态目录映射
  • 示例3,静态目录映射,优先级控制
  • 示例4,URI重写

    静态文件服务配置

    默认情况下,gf框架已开启了静态文件服务功能,但是需要开发者配置静态文件目录才能提供服务。

    静态文件服务涉及到的常用配置方法如下:

    1. // 设置http server参数 - ServerRoot
    2. func (s *Server) SetServerRoot(root string)
    3. // 添加静态文件搜索目录,必须给定目录的绝对路径
    4. func (s *Server) AddSearchPath(path string)
    5. // 设置http server参数 - IndexFiles,默认展示文件,如:index.html, index.htm
    6. func (s *Server) SetIndexFiles(index []string)
    7. // 是否允许展示访问目录的文件列表
    8. func (s *Server) SetIndexFolder(enabled bool)
    9. // 添加URI与静态目录的映射
    10. func (s *Server) AddStaticPath(prefix string, path string)
    11. // 静态文件服务总开关:是否开启/关闭静态文件服务
    12. func (s *Server) SetFileServerEnabled(enabled bool)
    13. // 设置URI重写规则
    14. func (s *Server) SetRewrite(uri string, rewrite string)
    15. // 设置URI重写规则(批量)
    16. func (s *Server) SetRewriteMap(rewrites map[string]string)

    其中,

    1. IndexFiles为当访问目录时默认检索的文件名称列表(按照slice先后顺序进行检索),当检索的文件存在时则返回文件内容,否则展示目录列表(SetIndexFoldertrue时),默认的IndexFiles为:index.html, index.htm
    2. SetIndexFolder为设置是否在用户访问文件目录,且没有在目录下检索到IndexFiles时,则展示目录下的文件列表,默认为关闭;
    3. SetServerRoot为设置默认提供服务的静态文件目录,该目录会被自动添加到SearchPath中的第一个搜索路径;
    4. AddSearchPath为添加静态文件检索目录,可以有多个,按照文件目录添加的先后顺序执行优先级检索;
    5. AddStaticPath为添加URI与目录路径的映射关系,可以自定义静态文件目录的访问URI规则;
    6. SetRewrite/SetRewriteMap为重写规则设置(类似于nginxrewrite),严格上来讲不仅仅是静态文件服务,当然也支持动态的路由注册的rewrite

    Tips: 设置静态文件服务的目录路径时,可以使用绝对路径,也可以使用相对路径,例如设置当前运行目录提供静态文件服务可以使用SetServerRoot(".")

    开发者可以设置多个文件目录来提供静态文件服务,并且可以设置目录及URI的优先级,但是一旦通过SetFileServerEnabled关闭了静态服务,所有静态文件/目录的访问都将失效。

    示例1, 基本使用

    1. package main
    2. import "github.com/gogf/gf/g"
    3. // 静态文件服务器基本使用
    4. func main() {
    5. s := g.Server()
    6. s.SetIndexFolder(true)
    7. s.SetServerRoot("/Users/john/Temp")
    8. s.AddSearchPath("/Users/john/Documents")
    9. s.SetPort(8199)
    10. s.Run()
    11. }

    示例2,静态目录映射

    1. package main
    2. import "github.com/gogf/gf/g"
    3. // 静态文件服务器,支持自定义静态目录映射
    4. func main() {
    5. s := g.Server()
    6. s.SetIndexFolder(true)
    7. s.SetServerRoot("/Users/john/Temp")
    8. s.AddSearchPath("/Users/john/Documents")
    9. s.AddStaticPath("/my-doc", "/Users/john/Documents")
    10. s.SetPort(8199)
    11. s.Run()
    12. }

    示例3,静态目录映射,优先级控制

    静态目录映射的优先级按照绑定的URI精准度进行控制,绑定的URI越精准(深度优先匹配),那么优先级越高。

    1. package main
    2. import "github.com/gogf/gf/g"
    3. // 静态文件服务器,支持自定义静态目录映射
    4. func main() {
    5. s := g.Server()
    6. s.SetIndexFolder(true)
    7. s.SetServerRoot("/Users/john/Temp")
    8. s.AddSearchPath("/Users/john/Documents")
    9. s.AddStaticPath("/my-doc", "/Users/john/Documents")
    10. s.AddStaticPath("/my-doc/test", "/Users/john/Temp")
    11. s.SetPort(8199)
    12. s.Run()
    13. }

    其中,访问/my-doc/test的优先级会比/my-doc高,因此假如/Users/john/Documents目录下存在test目录(与自定义的/my-doc/test冲突),将会无法被访问到。

    示例4,URI重写

    gf框架的静态文件服务支持将任意的URI重写,替换为制定的URI,使用SetRewrite/SetRewriteMap方法。

    示例,在/Users/john/Temp目录下只有两个文件test1.htmltest2.html

    1. package main
    2. import "github.com/gogf/gf/g"
    3. func main() {
    4. s := g.Server()
    5. s.SetServerRoot("/Users/john/Temp")
    6. s.SetRewrite("/test.html", "/test1.html")
    7. s.SetRewriteMap(g.MapStrStr{
    8. "/my-test1" : "/test1.html",
    9. "/my-test2" : "/test2.html",
    10. })
    11. s.SetPort(8199)
    12. s.Run()
    13. }

    执行后,

    1. 当我们访问 /test.html ,其实最终被重写到了 test1.html,返回的是该文件内容;
    2. 当我们访问 /my-test1 ,其实最终被重写到了 test1.html,返回的是该文件内容;
    3. 当我们访问 /my-test2 ,其实最终被重写到了 test2.html,返回的是该文件内容;