diff --git a/modules/context/repo.go b/modules/context/repo.go index 4670e01564..770296b390 100644 --- a/modules/context/repo.go +++ b/modules/context/repo.go @@ -223,6 +223,9 @@ func RedirectToRepo(ctx *Context, redirectRepoID int64) { fmt.Sprintf("%s/%s", repo.MustOwnerName(), repo.Name), 1, ) + if ctx.Req.URL.RawQuery != "" { + redirectPath += "?" + ctx.Req.URL.RawQuery + } ctx.Redirect(redirectPath) } diff --git a/routers/repo/http.go b/routers/repo/http.go index 9475c25893..2bc50efd83 100644 --- a/routers/repo/http.go +++ b/routers/repo/http.go @@ -89,9 +89,24 @@ func HTTP(ctx *context.Context) { reponame = reponame[:len(reponame)-5] } - repo, err := models.GetRepositoryByOwnerAndName(username, reponame) + owner, err := models.GetUserByName(username) if err != nil { - ctx.NotFoundOrServerError("GetRepositoryByOwnerAndName", models.IsErrRepoNotExist, err) + ctx.NotFoundOrServerError("GetUserByName", models.IsErrUserNotExist, err) + return + } + + repo, err := models.GetRepositoryByName(owner.ID, reponame) + if err != nil { + if models.IsErrRepoNotExist(err) { + redirectRepoID, err := models.LookupRepoRedirect(owner.ID, reponame) + if err == nil { + context.RedirectToRepo(ctx, redirectRepoID) + } else { + ctx.NotFoundOrServerError("GetRepositoryByName", models.IsErrRepoRedirectNotExist, err) + } + } else { + ctx.ServerError("GetRepositoryByName", err) + } return }