From d6c88764ebaf0e48b98eaa1069168a9e00d6aa98 Mon Sep 17 00:00:00 2001 From: gilwo Date: Fri, 22 Dec 2023 17:18:04 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=A9=B9=F0=9F=9A=A8=20-=20fix=20for=20redi?= =?UTF-8?q?rect=20with=20query=20params=20(#2748)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * redirect with query params did not work, fix it and add test for it * redirect middleware - fix test typo --- middleware/redirect/redirect.go | 6 +++++- middleware/redirect/redirect_test.go | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/middleware/redirect/redirect.go b/middleware/redirect/redirect.go index 7af21320fe..2818142e54 100644 --- a/middleware/redirect/redirect.go +++ b/middleware/redirect/redirect.go @@ -30,7 +30,11 @@ func New(config ...Config) fiber.Handler { for k, v := range cfg.rulesRegex { replacer := captureTokens(k, c.Path()) if replacer != nil { - return c.Redirect(replacer.Replace(v), cfg.StatusCode) + queryString := string(c.Context().QueryArgs().QueryString()) + if queryString != "" { + queryString = "?" + queryString + } + return c.Redirect(replacer.Replace(v)+queryString, cfg.StatusCode) } } return c.Next() diff --git a/middleware/redirect/redirect_test.go b/middleware/redirect/redirect_test.go index b6323ab54b..61fc00a11a 100644 --- a/middleware/redirect/redirect_test.go +++ b/middleware/redirect/redirect_test.go @@ -44,6 +44,12 @@ func Test_Redirect(t *testing.T) { }, StatusCode: fiber.StatusMovedPermanently, })) + app.Use(New(Config{ + Rules: map[string]string{ + "/params": "/with_params", + }, + StatusCode: fiber.StatusMovedPermanently, + })) app.Get("/api/*", func(c *fiber.Ctx) error { return c.SendString("API") @@ -104,6 +110,12 @@ func Test_Redirect(t *testing.T) { url: "/api/test", statusCode: fiber.StatusOK, }, + { + name: "redirect with query params", + url: "/params?query=abc", + redirectTo: "/with_params?query=abc", + statusCode: fiber.StatusMovedPermanently, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {