企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
Iris 具有已知最简单的形式,用于将子域注册到单个应用程序。 当然,你也可以在生产中使用 nginx 或 caddy 进行管理。 子域分为两类:**静态** 和 **动态/通配符**. * 静态 : 当你知道子域名的时候,即:` analytics.mydomain.com` * 通配符 : 当你不知道子域名,但是你知道它在特定的子域名前面,或者你知道根域名,即 : `user_created.mydomain.com`, `otheruser.mydomain.com `如同`username.github.io` 一样。 我们使用 `iris.Party` 或者 `iris.Application` 的 `Subdomain` 和 `WildcardSubdomain` 方法去注册子域名。 `Subdomain` 方法返回一个新的 `Party` ,该分组负责注册路由到特定的子域名。 与常规 `Party` 的唯一区别在于, 如果从子路由分组调用,则子域将被添加到路径之前,而不是被添加到路径中。 所以,如果 `app.Subdomain("admin").Subdomain("panel")` 则结果为: `"panel.admin."`。 ``` Subdomain(subdomain string, middleware ...Handler) Party ``` `WildcardSubdomain` 方法返回一个新的 `Party` ,它负责将路由注册到动态通配符子域。动态子域是可以处理任何子域请求的子域。动态子域是可以处理任何子域请求的子域。服务器将接受任何子域(如果未找到静态子域),它将搜索并执行此`Party`的处理程序。 ``` WildcardSubdomain(middleware ...Handler) Party ``` 示例代码: ``` // [app := iris.New...] admin := app.Subdomain("admin") // admin.mydomain.com admin.Get("/", func(ctx iris.Context) { ctx.Writef("INDEX FROM admin.mydomain.com") }) // admin.mydomain.com/hey admin.Get("/hey", func(ctx iris.Context) { ctx.Writef("HEY FROM admin.mydomain.com/hey") }) // [这里的其他路线...] app.Run(iris.Addr("mydomain.com:80")) ``` 对于本地开发,你需要去编辑你的 hosts, 例如在 windows 操作系统中打开 `C:\Windows\System32\Drivers\etc\hosts `文件并且加入一下内容: ``` 127.0.0.1 mydomain.com 127.0.0.1 admin.mydomain.com ``` 为了证明子域可以像任何其他常规 `Party` 一样工作,你还可以使用以下替代方法注册子域: ``` adminSubdomain:= app.Party("admin.") // 或者 adminAnalayticsSubdomain := app.Party("admin.analytics.") // 或动态的: anySubdomain := app.Party("*.") ``` 还有一个 ` iris.Application` 方法,它也可以为子域名注册全局重定向规则。 `SubdomainRedirect` 设置 (或在使用多次的情况下添加) 一个路由器包装程序,该路由器包装程序在执行以下操作之前,将(子)域(状态永久移动)尽可能快地重定向到另一个子域或根域。 它接收两个参数,它们分别是 `from` 和 `to/target` 位置, 'from' 也可以是通配符子域 就如同 (app.WildcardSubdomain()) 'to' 是不允许作为通配符一样明显,相反的, 'from' 也可以作为根域名(程序) 当 'to' 不是根域名的时候。 ``` SubdomainRedirect(from, to Party) Party ``` # 使用方法 ``` www := app.Subdomain("www") app.SubdomainRedirect(app, www) ``` 上面的代码会将所有 http(s)://mydomain.com/%anypath% 重定向到 http(s)://www.mydomain.com/%anypath%. 使用子域时, `Context` 提供了四种主要方法,这些方法可能对你有所帮助。 ``` // Host 返回当前网址的主机部分。 Host() string // Subdomain 返回此请求的子域(如果有)。 // 请注意,这是一种快速方法,无法涵盖所有情况。 Subdomain() (subdomain string) // IsWWW 如果当前子域(如果有)是www,则返回true。 IsWWW() bool // FullRqeuestURI 返回完整的URI, // 包括方案,主机和相对的请求路径/资源。 FullRequestURI() string ``` # 使用方法 ``` func info(ctx iris.Context) { method := ctx.Method() subdomain := ctx.Subdomain() path := ctx.Path() ctx.Writef("\nInfo\n\n") ctx.Writef("Method: %s\nSubdomain: %s\nPath: %s", method, subdomain, path) } ```