From b1a0a78a51a31d68a0412d7aab2b6e67bcbd41e4 Mon Sep 17 00:00:00 2001 From: zeripath Date: Wed, 23 Mar 2022 16:46:08 +0000 Subject: [PATCH] Redirect .wiki/* ui link to /wiki (#18831) (#19184) Backport #18831 Redirect .wiki/* ui link to /wiki fix #18590 Signed-off-by: a1012112796 <1012112796@qq.com> Signed-off-by: Andrew Thornton Co-authored-by: Andrew Thornton Co-authored-by: a1012112796 <1012112796@qq.com> --- modules/context/repo.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/modules/context/repo.go b/modules/context/repo.go index fb7d98583a..ac00c2c10d 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -440,6 +440,26 @@ func RepoAssignment(ctx *Context) (cancel context.CancelFunc) { ctx.Repo.Owner = owner ctx.Data["Username"] = ctx.Repo.Owner.Name + // redirect link to wiki + if strings.HasSuffix(repoName, ".wiki") { + // ctx.Req.URL.Path does not have the preceding appSubURL - any redirect must have this added + // Now we happen to know that all of our paths are: /:username/:reponame/whatever_else + originalRepoName := ctx.Params(":reponame") + redirectRepoName := strings.TrimSuffix(repoName, ".wiki") + redirectRepoName += originalRepoName[len(redirectRepoName)+5:] + redirectPath := strings.Replace( + ctx.Req.URL.EscapedPath(), + url.PathEscape(userName)+"/"+url.PathEscape(originalRepoName), + url.PathEscape(userName)+"/"+url.PathEscape(redirectRepoName)+"/wiki", + 1, + ) + if ctx.Req.URL.RawQuery != "" { + redirectPath += "?" + ctx.Req.URL.RawQuery + } + ctx.Redirect(path.Join(setting.AppSubURL, redirectPath)) + return + } + // Get repository. repo, err := repo_model.GetRepositoryByName(owner.ID, repoName) if err != nil {