package service import ( "net" "net/url" "strings" ) // NormalizeSiteDomain 接受域名、主机名或完整 URL,统一为小写主机名。 func NormalizeSiteDomain(raw string) string { raw = strings.TrimSpace(strings.ToLower(raw)) if raw == "" { return "" } if !strings.Contains(raw, "://") { raw = "https://" + raw } parsed, err := url.Parse(raw) if err != nil { return "" } host := strings.TrimSuffix(parsed.Hostname(), ".") if host == "" { return "" } if ip := net.ParseIP(host); ip == nil && !strings.Contains(host, ".") && host != "localhost" { return "" } return host } func PageHost(rawURL string) string { parsed, err := url.Parse(strings.TrimSpace(rawURL)) if err != nil { return "" } return strings.TrimSuffix(strings.ToLower(parsed.Hostname()), ".") } // SiteDomainMatches 同时兼容带 www 与不带 www 的主机名。 func SiteDomainMatches(siteDomain, pageURL string) bool { expected := NormalizeSiteDomain(siteDomain) actual := PageHost(pageURL) if expected == "" || actual == "" { return expected == "" } return strings.TrimPrefix(expected, "www.") == strings.TrimPrefix(actual, "www.") }