diff --git a/modules/caddyhttp/vars.go b/modules/caddyhttp/vars.go index d6c5a6609..1208d9c65 100644 --- a/modules/caddyhttp/vars.go +++ b/modules/caddyhttp/vars.go @@ -16,6 +16,7 @@ package caddyhttp import ( "context" + "fmt" "net/http" "github.com/caddyserver/caddy/v2" @@ -64,12 +65,23 @@ func (VarsMatcher) CaddyModule() caddy.ModuleInfo { // Match matches a request based on variables in the context. func (m VarsMatcher) Match(r *http.Request) bool { - vars := r.Context().Value(VarsCtxKey).(map[string]string) + vars := r.Context().Value(VarsCtxKey).(map[string]interface{}) repl := r.Context().Value(caddy.ReplacerCtxKey).(*caddy.Replacer) for k, v := range m { keyExpanded := repl.ReplaceAll(k, "") valExpanded := repl.ReplaceAll(v, "") - if vars[keyExpanded] != valExpanded { + var varStr string + switch vv := vars[keyExpanded].(type) { + case string: + varStr = vv + case fmt.Stringer: + varStr = vv.String() + case error: + varStr = vv.Error() + default: + varStr = fmt.Sprintf("%v", vv) + } + if varStr != valExpanded { return false } }