From 3b90e2fedfc15d803ef51e3c7781a111252419a5 Mon Sep 17 00:00:00 2001 From: dragon Date: Wed, 16 Apr 2025 16:35:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20404=20=E6=97=B6=E7=A9=BA?= =?UTF-8?q?=E6=8C=87=E9=92=88=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/server.go | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/pkg/server.go b/pkg/server.go index 170a96f..20c2ad9 100644 --- a/pkg/server.go +++ b/pkg/server.go @@ -109,11 +109,13 @@ func (s *Server) Serve(writer http.ResponseWriter, request *http.Request) error if err != nil { if errors.Is(err, os.ErrNotExist) { if meta.HistoryRouteMode { + // 回退 abc => index.html result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, "index.html") if err == nil { meta.Path = "index.html" } } else { + // 回退 abc => abc/ => abc/index.html result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, meta.Path+"/index.html") if err == nil { meta.Path = strings.Trim(meta.Path+"/index.html", "/") @@ -123,25 +125,30 @@ func (s *Server) Serve(writer http.ResponseWriter, request *http.Request) error return err } } - if err != nil && meta.CustomNotFound && errors.Is(err, os.ErrNotExist) { - // 存在 404 页面的情况 - result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, "404.html") - if err != nil { - return err - } - writer.Header().Set("Content-Type", mime.TypeByExtension(".html")) - writer.WriteHeader(http.StatusNotFound) - if render := meta.TryRender(meta.Path, "/404.html"); render != nil { - defer result.Close() - if err = render.Render(writer, request, result); err != nil { + // 处理请求错误 + if err != nil { + if meta.CustomNotFound && errors.Is(err, os.ErrNotExist) { + // 存在 404 页面的情况 + result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, "404.html") + if err != nil { return err } + writer.Header().Set("Content-Type", mime.TypeByExtension(".html")) + writer.WriteHeader(http.StatusNotFound) + if render := meta.TryRender(meta.Path, "/404.html"); render != nil { + defer result.Close() + if err = render.Render(writer, request, result); err != nil { + return err + } + return nil + } else { + _, _ = io.Copy(writer, result) + _ = result.Close() + } return nil } else { - _, _ = io.Copy(writer, result) - _ = result.Close() + return err } - return nil } fileName := filepath.Base(meta.Path) render := meta.TryRender(meta.Path)