From 9d2c251214ad49a438fff14cc6ce55477cb22414 Mon Sep 17 00:00:00 2001
From: zeripath <art27@cantab.net>
Date: Fri, 9 Apr 2021 14:17:57 +0100
Subject: [PATCH] Move FCGI req.URL.Path fix-up to the FCGI listener (#15292)

Simplify the web.go FCGI path by moving the req.URL.Path fix-up to listener

Signed-off-by: Andrew Thornton <art27@cantab.net>

Co-authored-by: 6543 <6543@obermui.de>
---
 cmd/web_graceful.go   | 9 ++++++++-
 routers/routes/web.go | 9 ---------
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/cmd/web_graceful.go b/cmd/web_graceful.go
index 5db065818a..91ac024ddb 100644
--- a/cmd/web_graceful.go
+++ b/cmd/web_graceful.go
@@ -9,9 +9,11 @@ import (
 	"net"
 	"net/http"
 	"net/http/fcgi"
+	"strings"
 
 	"code.gitea.io/gitea/modules/graceful"
 	"code.gitea.io/gitea/modules/log"
+	"code.gitea.io/gitea/modules/setting"
 )
 
 func runHTTP(network, listenAddr, name string, m http.Handler) error {
@@ -48,7 +50,12 @@ func runFCGI(network, listenAddr, name string, m http.Handler) error {
 	fcgiServer := graceful.NewServer(network, listenAddr, name)
 
 	err := fcgiServer.ListenAndServe(func(listener net.Listener) error {
-		return fcgi.Serve(listener, m)
+		return fcgi.Serve(listener, http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
+			if setting.AppSubURL != "" {
+				req.URL.Path = strings.TrimPrefix(req.URL.Path, setting.AppSubURL)
+			}
+			m.ServeHTTP(resp, req)
+		}))
 	})
 	if err != nil {
 		log.Fatal("Failed to start FCGI main server: %v", err)
diff --git a/routers/routes/web.go b/routers/routes/web.go
index b2a75acd09..7081b30e54 100644
--- a/routers/routes/web.go
+++ b/routers/routes/web.go
@@ -168,15 +168,6 @@ func WebRoutes() *web.Route {
 		r.Use(h)
 	}
 
-	if (setting.Protocol == setting.FCGI || setting.Protocol == setting.FCGIUnix) && setting.AppSubURL != "" {
-		r.Use(func(next http.Handler) http.Handler {
-			return http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) {
-				req.URL.Path = strings.TrimPrefix(req.URL.Path, setting.AppSubURL)
-				next.ServeHTTP(resp, req)
-			})
-		})
-	}
-
 	mailer.InitMailRender(templates.Mailer())
 
 	if setting.Service.EnableCaptcha {