From c195f182295376cb3cb6714562835d755951c007 Mon Sep 17 00:00:00 2001 From: ExplodingDragon Date: Tue, 25 Nov 2025 20:36:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=8D=E5=AE=9A=E5=90=91?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/filters/direct.go | 36 +++++++++++++++++++----------------- pkg/filters/template.go | 3 --- tests/core_test.go | 6 ++++++ 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/pkg/filters/direct.go b/pkg/filters/direct.go index 6208448..01ebb2d 100644 --- a/pkg/filters/direct.go +++ b/pkg/filters/direct.go @@ -32,24 +32,26 @@ func FilterInstDirect(_ core.Params) (core.FilterInstance, error) { http.Error(writer, "Method not allowed", http.StatusMethodNotAllowed) return nil } - var resp *http.Response - var path string - defaultPath := param.Prefix + strings.TrimSuffix(ctx.Path, "/") - for _, p := range []string{defaultPath, defaultPath + "/index.html"} { - zap.L().Debug("direct fetch", zap.String("path", p)) - resp, err = ctx.NativeOpen(request.Context(), p, nil) - if err != nil { - if resp != nil { - resp.Body.Close() - } - if !errors.Is(err, os.ErrNotExist) { - zap.L().Debug("error", zap.Any("error", err)) - return err - } - continue + path := param.Prefix + strings.TrimSuffix(ctx.Path, "/") + zap.L().Debug("direct fetch", zap.String("path", path)) + resp, err := ctx.NativeOpen(request.Context(), path, nil) + if err != nil { + if resp != nil { + resp.Body.Close() } - path = p - break + if !errors.Is(err, os.ErrNotExist) { + zap.L().Debug("error", zap.Any("error", err)) + return err + } + exists, e := ctx.Exists(ctx, path+"/index.html") + if e != nil { + return err + } + if exists { + http.Redirect(writer, request, strings.TrimSuffix(request.URL.Path, "/")+"/", http.StatusFound) + return nil + } + return err } if resp == nil { return os.ErrNotExist diff --git a/pkg/filters/template.go b/pkg/filters/template.go index b007dc7..9dc823b 100644 --- a/pkg/filters/template.go +++ b/pkg/filters/template.go @@ -23,9 +23,6 @@ func FilterInstTemplate(_ core.Params) (core.FilterInstance, error) { if err != nil { return err } - if err != nil { - return err - } out := &bytes.Buffer{} parse, err := utils.NewTemplate().Funcs(map[string]any{ "load": func(path string) (any, error) { diff --git a/tests/core_test.go b/tests/core_test.go index b3e321f..2074049 100644 --- a/tests/core_test.go +++ b/tests/core_test.go @@ -94,6 +94,12 @@ func Test_fail_back(t *testing.T) { server.AddFile("org1/org1.example.com/gh-pages/index.html", "hello world 1") server.AddFile("org1/org1.example.com/gh-pages/child/index.html", "hello world 2") server.AddFile("org1/child/gh-pages/no.html", "hello world 3") + + _, resp, err := server.OpenFile("https://org1.example.com/child") + assert.NoError(t, err) + assert.Equal(t, 302, resp.StatusCode) + assert.Equal(t, "/child/", resp.Header.Get("Location")) + data, _, err := server.OpenFile("https://org1.example.com/child/") assert.NoError(t, err) assert.Equal(t, "hello world 2", string(data))