summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/rewrite/rewrite.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2022-05-09 11:09:42 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2022-05-09 11:09:42 -0600
commit693e9b5283e675b56084ecc83d73176cab0ee27c (patch)
tree3bd27fce798973c3cbc39f9e4ef18bd5e08df845 /modules/caddyhttp/rewrite/rewrite.go
parentb687d7b9670890efd8dc065fb7a025cd0c3a1445 (diff)
rewrite: Handle fragment before query (fix #4775)
Diffstat (limited to 'modules/caddyhttp/rewrite/rewrite.go')
-rw-r--r--modules/caddyhttp/rewrite/rewrite.go13
1 files changed, 10 insertions, 3 deletions
diff --git a/modules/caddyhttp/rewrite/rewrite.go b/modules/caddyhttp/rewrite/rewrite.go
index 690e752..da92269 100644
--- a/modules/caddyhttp/rewrite/rewrite.go
+++ b/modules/caddyhttp/rewrite/rewrite.go
@@ -135,13 +135,20 @@ func (rewr Rewrite) Rewrite(r *http.Request, repl *caddy.Replacer) bool {
// find the bounds of each part of the URI that exist
pathStart, qsStart, fragStart := -1, -1, -1
pathEnd, qsEnd := -1, -1
+ loop:
for i, ch := range uri {
switch {
case ch == '?' && qsStart < 0:
pathEnd, qsStart = i, i+1
- case ch == '#' && fragStart < 0:
- qsEnd, fragStart = i, i+1
- case pathStart < 0 && qsStart < 0 && fragStart < 0:
+ case ch == '#' && fragStart < 0: // everything after fragment is fragment (very clear in RFC 3986 section 4.2)
+ if qsStart < 0 {
+ pathEnd = i
+ } else {
+ qsEnd = i
+ }
+ fragStart = i + 1
+ break loop
+ case pathStart < 0 && qsStart < 0:
pathStart = i
}
}