From 036569ac5f861b74b839133049ca6e990aa46d01 Mon Sep 17 00:00:00 2001 From: ExplodingDragon Date: Tue, 15 Apr 2025 20:45:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E5=9F=9F=E5=90=8D=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/core/alias.go | 6 +++--- pkg/core/domain.go | 4 ++-- pkg/core/meta.go | 4 ++-- pkg/server.go | 6 ++++++ 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/pkg/core/alias.go b/pkg/core/alias.go index 50189b2..41cbb7d 100644 --- a/pkg/core/alias.go +++ b/pkg/core/alias.go @@ -21,7 +21,7 @@ func NewDomainAlias(config utils.Config) *DomainAlias { } func (a *DomainAlias) Query(domain string) (*Alias, error) { - get, err := a.config.Get("alias/" + domain) + get, err := a.config.Get("domain/alias/" + domain) if err != nil { return nil, err } @@ -42,9 +42,9 @@ func (a *DomainAlias) Bind(domain, owner, repo, branch string) error { if err != nil { return err } - return a.config.Put("domain/"+domain, string(saveB), utils.TtlKeep) + return a.config.Put("domain/alias/"+domain, string(saveB), utils.TtlKeep) } func (a *DomainAlias) Unbind(domain string) error { - return a.config.Delete("domain/" + domain) + return a.config.Delete("domain/alias/" + domain) } diff --git a/pkg/core/domain.go b/pkg/core/domain.go index 12ca816..8d71f11 100644 --- a/pkg/core/domain.go +++ b/pkg/core/domain.go @@ -66,7 +66,7 @@ func (p *PageDomain) ParseDomainMeta(domain, path, branch string) (*PageDomainCo if !strings.HasSuffix(domain, "."+p.baseDomain) { alias, err := p.alias.Query(domain) if err != nil { - zap.L().Warn("未知域名", zap.String("base", p.baseDomain), zap.String("domain", domain)) + zap.L().Warn("未知域名", zap.String("base", p.baseDomain), zap.String("domain", domain), zap.Error(err)) return nil, os.ErrNotExist } zap.L().Debug("命中别名", zap.String("domain", domain), zap.Any("alias", alias)) @@ -91,7 +91,7 @@ func (p *PageDomain) ParseDomainMeta(domain, path, branch string) (*PageDomainCo func (p *PageDomain) ReturnMeta(owner string, repo string, branch string, path []string) (*PageDomainContent, error) { rel := &PageDomainContent{} - if meta, err := p.GetMeta(owner, repo, branch); err == nil { + if meta, err := p.GetMeta(p.baseDomain, owner, repo, branch); err == nil { rel.PageMetaContent = meta rel.Owner = owner rel.Repo = repo diff --git a/pkg/core/meta.go b/pkg/core/meta.go index 12402e2..335ed01 100644 --- a/pkg/core/meta.go +++ b/pkg/core/meta.go @@ -71,7 +71,7 @@ func NewServerMeta(client *http.Client, backend Backend, config utils.Config, tt return &ServerMeta{backend, client, config, ttl, utils.NewLocker()} } -func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, error) { +func (s *ServerMeta) GetMeta(baseDomain, owner, repo, branch string) (*PageMetaContent, error) { rel := &PageMetaContent{ IsPage: false, Renders: make(map[string]string), @@ -136,7 +136,7 @@ func (s *ServerMeta) GetMeta(owner, repo, branch string) (*PageMetaContent, erro } if cname, err := s.ReadString(owner, repo, rel.CommitID, "CNAME"); err == nil { cname = strings.TrimSpace(cname) - if regexpHostname.MatchString(cname) { + if regexpHostname.MatchString(cname) && !strings.HasSuffix(strings.ToLower(cname), strings.ToLower(baseDomain)) { rel.Domain = cname } else { zap.L().Debug("指定的 CNAME 不合法", zap.String("cname", cname)) diff --git a/pkg/server.go b/pkg/server.go index e81fb8c..57e87dc 100644 --- a/pkg/server.go +++ b/pkg/server.go @@ -1,6 +1,7 @@ package pkg import ( + "fmt" "io" "mime" "net/http" @@ -98,6 +99,11 @@ func (s *Server) Serve(writer http.ResponseWriter, request *http.Request) error } zap.L().Debug("获取请求", zap.Any("request", meta.Path)) // todo(feat) : 支持 http range + if meta.Domain != "" && meta.Domain != request.Host { + zap.L().Debug("重定向地址", zap.Any("src", request.Host), zap.Any("dst", meta.Domain)) + http.Redirect(writer, request, fmt.Sprintf("https://%s/%s", meta.Domain, meta.Path), http.StatusFound) + return nil + } result, err := s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, meta.Path) if err != nil { if meta.HistoryRouteMode && errors.Is(err, os.ErrNotExist) {