diff --git a/proxy/rewriter.go b/proxy/rewriter.go index 59f8ce4..2891519 100644 --- a/proxy/rewriter.go +++ b/proxy/rewriter.go @@ -125,17 +125,14 @@ func (r *ContentRewriter) rewriteURL(urlStr string) string { return urlStr } - // 已经是代理 URL,直接返回 if strings.HasPrefix(urlStr, "/p/"+r.token+"/") { return urlStr } - // 处理协议相对 URL(//domain.com/path) if strings.HasPrefix(urlStr, "//") { urlStr = r.baseURL.Scheme + ":" + urlStr } - // 绝对路径(以 / 开头但不是 //) if strings.HasPrefix(urlStr, "/") && !strings.HasPrefix(urlStr, "//") { return "/p/" + r.token + urlStr } @@ -145,12 +142,18 @@ func (r *ContentRewriter) rewriteURL(urlStr string) string { return urlStr } - // 相对路径 if !u.IsAbs() { - u = r.baseURL.ResolveReference(u) + resolved := r.baseURL.ResolveReference(u) + proxyPath := resolved.Path + if resolved.RawQuery != "" { + proxyPath += "?" + resolved.RawQuery + } + if resolved.Fragment != "" { + proxyPath += "#" + resolved.Fragment + } + return "/p/" + r.token + proxyPath } - // 同域名 if u.Host == r.baseURL.Host { proxyPath := u.Path if u.RawQuery != "" { @@ -162,7 +165,6 @@ func (r *ContentRewriter) rewriteURL(urlStr string) string { return "/p/" + r.token + proxyPath } - // 跨域资源 return "/p/" + r.token + "/" + u.String() }