diff options
Diffstat (limited to 'caddyconfig')
| -rw-r--r-- | caddyconfig/httpcaddyfile/directives.go | 29 | ||||
| -rw-r--r-- | caddyconfig/httpcaddyfile/httptype.go | 1 | 
2 files changed, 23 insertions, 7 deletions
diff --git a/caddyconfig/httpcaddyfile/directives.go b/caddyconfig/httpcaddyfile/directives.go index 6b80e34..aaa8cb0 100644 --- a/caddyconfig/httpcaddyfile/directives.go +++ b/caddyconfig/httpcaddyfile/directives.go @@ -424,14 +424,29 @@ func sortRoutes(routes []ConfigValue) {  			jPathLen = len(jPM[0])  		} -		// if both directives have no path matcher, use whichever one -		// has any kind of matcher defined first. -		if iPathLen == 0 && jPathLen == 0 { -			return len(iRoute.MatcherSetsRaw) > 0 && len(jRoute.MatcherSetsRaw) == 0 -		} +		// some directives involve setting values which can overwrite +		// eachother, so it makes most sense to reverse the order so +		// that the lease specific matcher is first; everything else +		// has most-specific matcher first +		if iDir == "vars" { +			// if both directives have no path matcher, use whichever one +			// has no matcher first. +			if iPathLen == 0 && jPathLen == 0 { +				return len(iRoute.MatcherSetsRaw) == 0 && len(jRoute.MatcherSetsRaw) > 0 +			} + +			// sort with the least-specific (shortest) path first +			return iPathLen < jPathLen +		} else { +			// if both directives have no path matcher, use whichever one +			// has any kind of matcher defined first. +			if iPathLen == 0 && jPathLen == 0 { +				return len(iRoute.MatcherSetsRaw) > 0 && len(jRoute.MatcherSetsRaw) == 0 +			} -		// sort with the most-specific (longest) path first -		return iPathLen > jPathLen +			// sort with the most-specific (longest) path first +			return iPathLen > jPathLen +		}  	})  } diff --git a/caddyconfig/httpcaddyfile/httptype.go b/caddyconfig/httpcaddyfile/httptype.go index 4f9f8d0..5b0d845 100644 --- a/caddyconfig/httpcaddyfile/httptype.go +++ b/caddyconfig/httpcaddyfile/httptype.go @@ -129,6 +129,7 @@ func (st ServerType) Setup(inputServerBlocks []caddyfile.ServerBlock,  		{regexp.MustCompile(`{header\.([\w-]*)}`), "{http.request.header.$1}"},  		{regexp.MustCompile(`{path\.([\w-]*)}`), "{http.request.uri.path.$1}"},  		{regexp.MustCompile(`{re\.([\w-]*)\.([\w-]*)}`), "{http.regexp.$1.$2}"}, +		{regexp.MustCompile(`{vars\.([\w-]*)}`), "{http.vars.$1}"},  	}  	for _, sb := range originalServerBlocks {  | 
