summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Holt <mholt@users.noreply.github.com>2022-09-28 15:22:45 -0600
committerGitHub <noreply@github.com>2022-09-28 15:22:45 -0600
commit897a38958cb733551339f40f04e5798fcda55bcc (patch)
tree1f15a03c5d6f50a4fce046822c65d1c0ee23dfa5
parent61822f129b9edbbc1ed2fd068d8e5ba919b5881d (diff)
parent013b5103527cb1646dc717cadf48ad34aceaa77e (diff)
Merge pull request #5076 from caddyserver/fastcgi-redir
fastcgi: Redirect using original URI path (fix #5073) and rewrite: Only trim prefix if matched
-rw-r--r--caddytest/integration/caddyfile_adapt/php_fastcgi_expanded_form.txt4
-rw-r--r--caddytest/integration/caddyfile_adapt/php_fastcgi_handle_response.txt2
-rw-r--r--caddytest/integration/caddyfile_adapt/php_fastcgi_matcher.txt2
-rw-r--r--caddytest/integration/caddyfile_adapt/php_fastcgi_subdirectives.txt2
-rw-r--r--caddytest/integration/caddyfile_adapt/php_fastcgi_try_files_override.txt2
-rw-r--r--modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go2
-rw-r--r--modules/caddyhttp/rewrite/rewrite.go9
-rw-r--r--modules/caddyhttp/rewrite/rewrite_test.go10
8 files changed, 24 insertions, 9 deletions
diff --git a/caddytest/integration/caddyfile_adapt/php_fastcgi_expanded_form.txt b/caddytest/integration/caddyfile_adapt/php_fastcgi_expanded_form.txt
index bb7c7f7..2fa2b79 100644
--- a/caddytest/integration/caddyfile_adapt/php_fastcgi_expanded_form.txt
+++ b/caddytest/integration/caddyfile_adapt/php_fastcgi_expanded_form.txt
@@ -8,7 +8,7 @@ route {
}
not path */
}
- redir @canonicalPath {path}/ 308
+ redir @canonicalPath {http.request.orig_uri.path}/ 308
# If the requested file does not exist, try index files
@indexFiles {
@@ -50,7 +50,7 @@ route {
"handler": "static_response",
"headers": {
"Location": [
- "{http.request.uri.path}/"
+ "{http.request.orig_uri.path}/"
]
},
"status_code": 308
diff --git a/caddytest/integration/caddyfile_adapt/php_fastcgi_handle_response.txt b/caddytest/integration/caddyfile_adapt/php_fastcgi_handle_response.txt
index dbb0871..70a0780 100644
--- a/caddytest/integration/caddyfile_adapt/php_fastcgi_handle_response.txt
+++ b/caddytest/integration/caddyfile_adapt/php_fastcgi_handle_response.txt
@@ -42,7 +42,7 @@
"handler": "static_response",
"headers": {
"Location": [
- "{http.request.uri.path}/"
+ "{http.request.orig_uri.path}/"
]
},
"status_code": 308
diff --git a/caddytest/integration/caddyfile_adapt/php_fastcgi_matcher.txt b/caddytest/integration/caddyfile_adapt/php_fastcgi_matcher.txt
index 488c525..d90b2cb 100644
--- a/caddytest/integration/caddyfile_adapt/php_fastcgi_matcher.txt
+++ b/caddytest/integration/caddyfile_adapt/php_fastcgi_matcher.txt
@@ -30,7 +30,7 @@ php_fastcgi @api localhost:9000
"handler": "static_response",
"headers": {
"Location": [
- "{http.request.uri.path}/"
+ "{http.request.orig_uri.path}/"
]
},
"status_code": 308
diff --git a/caddytest/integration/caddyfile_adapt/php_fastcgi_subdirectives.txt b/caddytest/integration/caddyfile_adapt/php_fastcgi_subdirectives.txt
index 90d1633..a04d66f 100644
--- a/caddytest/integration/caddyfile_adapt/php_fastcgi_subdirectives.txt
+++ b/caddytest/integration/caddyfile_adapt/php_fastcgi_subdirectives.txt
@@ -43,7 +43,7 @@ php_fastcgi localhost:9000 {
"handler": "static_response",
"headers": {
"Location": [
- "{http.request.uri.path}/"
+ "{http.request.orig_uri.path}/"
]
},
"status_code": 308
diff --git a/caddytest/integration/caddyfile_adapt/php_fastcgi_try_files_override.txt b/caddytest/integration/caddyfile_adapt/php_fastcgi_try_files_override.txt
index 4342786..a3381f6 100644
--- a/caddytest/integration/caddyfile_adapt/php_fastcgi_try_files_override.txt
+++ b/caddytest/integration/caddyfile_adapt/php_fastcgi_try_files_override.txt
@@ -46,7 +46,7 @@ php_fastcgi localhost:9000 {
"handler": "static_response",
"headers": {
"Location": [
- "{http.request.uri.path}/"
+ "{http.request.orig_uri.path}/"
]
},
"status_code": 308
diff --git a/modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go b/modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go
index a9e6b22..799050e 100644
--- a/modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go
+++ b/modules/caddyhttp/reverseproxy/fastcgi/caddyfile.go
@@ -348,7 +348,7 @@ func parsePHPFastCGI(h httpcaddyfile.Helper) ([]httpcaddyfile.ConfigValue, error
}
redirHandler := caddyhttp.StaticResponse{
StatusCode: caddyhttp.WeakString(strconv.Itoa(http.StatusPermanentRedirect)),
- Headers: http.Header{"Location": []string{"{http.request.uri.path}/"}},
+ Headers: http.Header{"Location": []string{"{http.request.orig_uri.path}/"}},
}
redirRoute := caddyhttp.Route{
MatcherSetsRaw: []caddy.ModuleMap{redirMatcherSet},
diff --git a/modules/caddyhttp/rewrite/rewrite.go b/modules/caddyhttp/rewrite/rewrite.go
index 95bc504..31c9778 100644
--- a/modules/caddyhttp/rewrite/rewrite.go
+++ b/modules/caddyhttp/rewrite/rewrite.go
@@ -383,8 +383,13 @@ func trimPathPrefix(escapedPath, prefix string) string {
iPrefix++
}
- // found matching prefix, trim it
- return escapedPath[iPath:]
+ // if we iterated through the entire prefix, we found it, so trim it
+ if iPath >= len(prefix) {
+ return escapedPath[iPath:]
+ }
+
+ // otherwise we did not find the prefix
+ return escapedPath
}
func reverse(s string) string {
diff --git a/modules/caddyhttp/rewrite/rewrite_test.go b/modules/caddyhttp/rewrite/rewrite_test.go
index bc20c85..5875983 100644
--- a/modules/caddyhttp/rewrite/rewrite_test.go
+++ b/modules/caddyhttp/rewrite/rewrite_test.go
@@ -227,6 +227,16 @@ func TestRewrite(t *testing.T) {
},
{
rule: Rewrite{StripPathPrefix: "/prefix"},
+ input: newRequest(t, "GET", "/prefix"),
+ expect: newRequest(t, "GET", ""),
+ },
+ {
+ rule: Rewrite{StripPathPrefix: "/prefix"},
+ input: newRequest(t, "GET", "/"),
+ expect: newRequest(t, "GET", "/"),
+ },
+ {
+ rule: Rewrite{StripPathPrefix: "/prefix"},
input: newRequest(t, "GET", "/prefix/foo%2Fbar"),
expect: newRequest(t, "GET", "/foo%2Fbar"),
},