Commit 10484cfa authored by John Chadwick's avatar John Chadwick Committed by Matt Holt

fastcgi: Fix SCRIPT_NAME when path in address (#1852)

* Add tests for SCRIPT_NAME

* fastcgi: Include vhost path prefix in SCRIPT_NAME
parent 129efde9
...@@ -18,6 +18,7 @@ import ( ...@@ -18,6 +18,7 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/mholt/caddy"
"github.com/mholt/caddy/caddyhttp/httpserver" "github.com/mholt/caddy/caddyhttp/httpserver"
) )
...@@ -248,6 +249,11 @@ func (h Handler) buildEnv(r *http.Request, rule Rule, fpath string) (map[string] ...@@ -248,6 +249,11 @@ func (h Handler) buildEnv(r *http.Request, rule Rule, fpath string) (map[string]
// Strip PATH_INFO from SCRIPT_NAME // Strip PATH_INFO from SCRIPT_NAME
scriptName = strings.TrimSuffix(scriptName, pathInfo) scriptName = strings.TrimSuffix(scriptName, pathInfo)
// Add vhost path prefix to scriptName. Otherwise, some PHP software will
// have difficulty discovering its URL.
pathPrefix, _ := r.Context().Value(caddy.CtxKey("path_prefix")).(string)
scriptName = path.Join(pathPrefix, scriptName)
// Get the request URI from context. The context stores the original URI in case // Get the request URI from context. The context stores the original URI in case
// it was changed by a middleware such as rewrite. By default, we pass the // it was changed by a middleware such as rewrite. By default, we pass the
// original URI in as the value of REQUEST_URI (the user can overwrite this // original URI in as the value of REQUEST_URI (the user can overwrite this
......
...@@ -12,6 +12,7 @@ import ( ...@@ -12,6 +12,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/mholt/caddy"
"github.com/mholt/caddy/caddyhttp/httpserver" "github.com/mholt/caddy/caddyhttp/httpserver"
) )
...@@ -122,7 +123,11 @@ func TestBuildEnv(t *testing.T) { ...@@ -122,7 +123,11 @@ func TestBuildEnv(t *testing.T) {
} }
} }
rule := Rule{} rule := Rule{
Ext: ".php",
SplitPath: ".php",
IndexFiles: []string{"index.php"},
}
url, err := url.Parse("http://localhost:2015/fgci_test.php?test=foobar") url, err := url.Parse("http://localhost:2015/fgci_test.php?test=foobar")
if err != nil { if err != nil {
t.Error("Unexpected error:", err.Error()) t.Error("Unexpected error:", err.Error())
...@@ -156,6 +161,7 @@ func TestBuildEnv(t *testing.T) { ...@@ -156,6 +161,7 @@ func TestBuildEnv(t *testing.T) {
"QUERY_STRING": "test=foobar", "QUERY_STRING": "test=foobar",
"REQUEST_METHOD": "GET", "REQUEST_METHOD": "GET",
"HTTP_HOST": "localhost:2015", "HTTP_HOST": "localhost:2015",
"SCRIPT_NAME": "/fgci_test.php",
} }
} }
...@@ -206,6 +212,14 @@ func TestBuildEnv(t *testing.T) { ...@@ -206,6 +212,14 @@ func TestBuildEnv(t *testing.T) {
envExpected["CUSTOM_URI"] = "custom_uri/fgci_test.php?test=foobar" envExpected["CUSTOM_URI"] = "custom_uri/fgci_test.php?test=foobar"
envExpected["CUSTOM_QUERY"] = "custom=true&test=foobar" envExpected["CUSTOM_QUERY"] = "custom=true&test=foobar"
testBuildEnv(r, rule, fpath, envExpected) testBuildEnv(r, rule, fpath, envExpected)
// 6. Test SCRIPT_NAME includes path prefix
r = newReq()
ctx := context.WithValue(r.Context(), caddy.CtxKey("path_prefix"), "/test")
r = r.WithContext(ctx)
envExpected = newEnv()
envExpected["SCRIPT_NAME"] = "/test/fgci_test.php"
testBuildEnv(r, rule, fpath, envExpected)
} }
func TestReadTimeout(t *testing.T) { func TestReadTimeout(t *testing.T) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment