修复在 proxy 时重定向的问题
This commit is contained in:
@@ -77,9 +77,6 @@ func (p *PageDomain) ReturnMeta(owner string, repo string, branch string, path [
|
|||||||
rel.Owner = owner
|
rel.Owner = owner
|
||||||
rel.Repo = repo
|
rel.Repo = repo
|
||||||
rel.Path = strings.Join(path, "/")
|
rel.Path = strings.Join(path, "/")
|
||||||
if strings.HasSuffix(rel.Path, "/") || rel.Path == "" {
|
|
||||||
rel.Path = rel.Path + "index.html"
|
|
||||||
}
|
|
||||||
if err = p.alias.Bind(meta.Alias, rel.Owner, rel.Repo, branch); err != nil {
|
if err = p.alias.Bind(meta.Alias, rel.Owner, rel.Repo, branch); err != nil {
|
||||||
zap.L().Warn("别名绑定失败", zap.Error(err))
|
zap.L().Warn("别名绑定失败", zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -144,6 +144,11 @@ func (s *Server) Serve(writer http.ResponseWriter, request *http.Request) error
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 在非反向代理时处理目录访问
|
||||||
|
if strings.HasSuffix(meta.Path, "/") || meta.Path == "" {
|
||||||
|
meta.Path = meta.Path + "index.html"
|
||||||
|
}
|
||||||
|
|
||||||
// 如果不是反向代理路由则跳过任何配置
|
// 如果不是反向代理路由则跳过任何配置
|
||||||
if request.Method != "GET" {
|
if request.Method != "GET" {
|
||||||
return os.ErrNotExist
|
return os.ErrNotExist
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ func NewServer() *VServer {
|
|||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
zap.L().Debug("ServeHTTP", zap.String("url", r.URL.String()))
|
zap.L().Debug("ServeHTTP", zap.String("url", r.URL.String()))
|
||||||
|
http.Error(w, "", http.StatusNotFound)
|
||||||
})
|
})
|
||||||
go func() {
|
go func() {
|
||||||
_ = http.Serve(listener, mux)
|
_ = http.Serve(listener, mux)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ alias:
|
|||||||
|
|
||||||
data, resp, err = server.OpenFile("https://org1.example.com/repo1/")
|
data, resp, err = server.OpenFile("https://org1.example.com/repo1/")
|
||||||
assert.Equal(t, resp.StatusCode, 302)
|
assert.Equal(t, resp.StatusCode, 302)
|
||||||
assert.Equal(t, resp.Header.Get("Location"), "https://www.example.org/index.html")
|
assert.Equal(t, resp.Header.Get("Location"), "https://www.example.org/")
|
||||||
data, resp, err = server.OpenFile("https://www.example.org")
|
data, resp, err = server.OpenFile("https://www.example.org")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "hello world", string(data))
|
assert.Equal(t, "hello world", string(data))
|
||||||
@@ -44,14 +44,18 @@ alias:
|
|||||||
`)
|
`)
|
||||||
data, resp, err = server.OpenFile("https://www.example.org")
|
data, resp, err = server.OpenFile("https://www.example.org")
|
||||||
assert.Equal(t, resp.StatusCode, 302)
|
assert.Equal(t, resp.StatusCode, 302)
|
||||||
assert.Equal(t, resp.Header.Get("Location"), "https://zzz.example.top/index.html")
|
assert.Equal(t, resp.Header.Get("Location"), "https://zzz.example.top/")
|
||||||
|
|
||||||
data, resp, err = server.OpenFile("https://www.example.org")
|
data, resp, err = server.OpenFile("https://www.example.org")
|
||||||
assert.Equal(t, resp.StatusCode, 404)
|
assert.Equal(t, resp.StatusCode, 404)
|
||||||
|
|
||||||
data, resp, err = server.OpenFile("https://org1.example.com/repo1/")
|
data, resp, err = server.OpenFile("https://org1.example.com/repo1/")
|
||||||
assert.Equal(t, resp.StatusCode, 302)
|
assert.Equal(t, resp.StatusCode, 302)
|
||||||
assert.Equal(t, resp.Header.Get("Location"), "https://zzz.example.top/index.html")
|
assert.Equal(t, resp.Header.Get("Location"), "https://zzz.example.top/")
|
||||||
|
|
||||||
|
data, resp, err = server.OpenFile("https://org1.example.com/repo1/get/some")
|
||||||
|
assert.Equal(t, resp.StatusCode, 302)
|
||||||
|
assert.Equal(t, resp.Header.Get("Location"), "https://zzz.example.top/get/some")
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_fail_back(t *testing.T) {
|
func Test_fail_back(t *testing.T) {
|
||||||
|
|||||||
@@ -12,13 +12,15 @@ func Test_proxy(t *testing.T) {
|
|||||||
hs := core.NewServer()
|
hs := core.NewServer()
|
||||||
defer server.Close()
|
defer server.Close()
|
||||||
defer hs.Close()
|
defer hs.Close()
|
||||||
|
hs.Add("/test/data", "hello data")
|
||||||
hs.Add("/test/", "hello proxy")
|
hs.Add("/test/", "hello proxy")
|
||||||
|
|
||||||
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
|
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
|
||||||
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
||||||
proxy:
|
proxy:
|
||||||
/api: %s/test
|
/api: %s/test
|
||||||
`, hs.URL)
|
/abi: %s/
|
||||||
|
`, hs.URL, hs.URL)
|
||||||
data, _, err := server.OpenFile("https://org1.example.com/repo1/")
|
data, _, err := server.OpenFile("https://org1.example.com/repo1/")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "hello world", string(data))
|
assert.Equal(t, "hello world", string(data))
|
||||||
@@ -26,4 +28,40 @@ proxy:
|
|||||||
data, _, err = server.OpenFile("https://org1.example.com/repo1/api")
|
data, _, err = server.OpenFile("https://org1.example.com/repo1/api")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, "hello proxy", string(data))
|
assert.Equal(t, "hello proxy", string(data))
|
||||||
|
data, _, err = server.OpenFile("https://org1.example.com/repo1/api/data")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "hello data", string(data))
|
||||||
|
|
||||||
|
_, resp, err := server.OpenFile("https://org1.example.com/repo1/abi/data")
|
||||||
|
assert.Equal(t, resp.StatusCode, 404)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_cname_proxy(t *testing.T) {
|
||||||
|
server := core.NewDefaultTestServer()
|
||||||
|
hs := core.NewServer()
|
||||||
|
defer server.Close()
|
||||||
|
defer hs.Close()
|
||||||
|
hs.Add("/test/", "hello proxy")
|
||||||
|
|
||||||
|
server.AddFile("org1/repo1/gh-pages/index.html", "hello world")
|
||||||
|
server.AddFile("org1/repo1/gh-pages/.pages.yaml", `
|
||||||
|
alias:
|
||||||
|
- www.example.org
|
||||||
|
proxy:
|
||||||
|
/api: %s/test
|
||||||
|
`, hs.URL)
|
||||||
|
_, resp, err := server.OpenFile("https://org1.example.com/repo1/")
|
||||||
|
assert.Equal(t, resp.StatusCode, 302)
|
||||||
|
assert.Equal(t, resp.Header.Get("Location"), "https://www.example.org/")
|
||||||
|
data, resp, err := server.OpenFile("https://www.example.org")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "hello world", string(data))
|
||||||
|
|
||||||
|
_, resp, err = server.OpenFile("https://org1.example.com/repo1/api")
|
||||||
|
assert.Equal(t, resp.StatusCode, 302)
|
||||||
|
assert.Equal(t, resp.Header.Get("Location"), "https://www.example.org/api")
|
||||||
|
|
||||||
|
data, resp, err = server.OpenFile("https://www.example.org/api")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, "hello proxy", string(data))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user