diff --git a/modules/caddyhttp/routes.go b/modules/caddyhttp/routes.go
index 59f287ea2..14c9f32ea 100644
--- a/modules/caddyhttp/routes.go
+++ b/modules/caddyhttp/routes.go
@@ -31,7 +31,8 @@ func (sr ServerRoute) anyMatcherSetMatches(r *http.Request) bool {
 			return true
 		}
 	}
-	return false
+	// if no matchers, always match
+	return len(sr.matcherSets) == 0
 }
 
 // MatcherSet is a set of matchers which
diff --git a/modules/caddyhttp/server.go b/modules/caddyhttp/server.go
index 7b14ffae3..4a1aafde2 100644
--- a/modules/caddyhttp/server.go
+++ b/modules/caddyhttp/server.go
@@ -65,19 +65,19 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 			repl.Set("http.error.id", handlerErr.ID)
 		}
 
-		if len(s.Errors.Routes) == 0 {
-			// TODO: polish the default error handling
-			log.Printf("[ERROR] Handler: %s", err)
-			if handlerErr, ok := err.(HandlerError); ok {
-				w.WriteHeader(handlerErr.StatusCode)
-			}
-		} else {
+		if s.Errors != nil && len(s.Errors.Routes) > 0 {
 			errStack, w := s.Errors.Routes.BuildCompositeRoute(w, r)
 			err := s.executeCompositeRoute(w, r, errStack)
 			if err != nil {
 				// TODO: what should we do if the error handler has an error?
 				log.Printf("[ERROR] handling error: %v", err)
 			}
+		} else {
+			// TODO: polish the default error handling
+			log.Printf("[ERROR] Handler: %s", err)
+			if handlerErr, ok := err.(HandlerError); ok {
+				w.WriteHeader(handlerErr.StatusCode)
+			}
 		}
 	}
 }