diff --git a/caddy/setup/rewrite.go b/caddy/setup/rewrite.go
index ab997d278..b270c93dd 100644
--- a/caddy/setup/rewrite.go
+++ b/caddy/setup/rewrite.go
@@ -80,8 +80,8 @@ func rewriteParse(c *Controller) ([]rewrite.Rule, error) {
 						return nil, c.ArgErr()
 					}
 					status, _ = strconv.Atoi(c.Val())
-					if status < 400 || status > 499 {
-						return nil, c.Err("status must be 4xx")
+					if status < 200 || (status > 299 && status < 400) || status > 499 {
+						return nil, c.Err("status must be 2xx or 4xx")
 					}
 				default:
 					return nil, c.ArgErr()
diff --git a/caddy/setup/rewrite_test.go b/caddy/setup/rewrite_test.go
index 29bfe9975..d252ed904 100644
--- a/caddy/setup/rewrite_test.go
+++ b/caddy/setup/rewrite_test.go
@@ -137,22 +137,43 @@ func TestRewriteParse(t *testing.T) {
 		 }`, false, []rewrite.Rule{
 			&rewrite.ComplexRule{Base: "/", To: "/to", Ifs: []rewrite.If{{A: "{path}", Operator: "is", B: "a"}}},
 		}},
+		{`rewrite {
+			status 500
+		 }`, true, []rewrite.Rule{
+			&rewrite.ComplexRule{},
+		}},
 		{`rewrite {
 			status 400
 		 }`, false, []rewrite.Rule{
-			&rewrite.ComplexRule{Base: "/", Regexp: regexp.MustCompile(".*"), Status: 400},
+			&rewrite.ComplexRule{Base: "/", Status: 400},
 		}},
 		{`rewrite {
 			to /to
 			status 400
 		 }`, false, []rewrite.Rule{
-			&rewrite.ComplexRule{Base: "/", To: "/to", Regexp: regexp.MustCompile(".*"), Status: 400},
+			&rewrite.ComplexRule{Base: "/", To: "/to", Status: 400},
 		}},
 		{`rewrite {
 			status 399
 		 }`, true, []rewrite.Rule{
 			&rewrite.ComplexRule{},
 		}},
+		{`rewrite {
+			status 200
+		 }`, false, []rewrite.Rule{
+			&rewrite.ComplexRule{Base: "/", Status: 200},
+		}},
+		{`rewrite {
+			to /to
+			status 200
+		 }`, false, []rewrite.Rule{
+			&rewrite.ComplexRule{Base: "/", To: "/to", Status: 200},
+		}},
+		{`rewrite {
+			status 199
+		 }`, true, []rewrite.Rule{
+			&rewrite.ComplexRule{},
+		}},
 		{`rewrite {
 			status 0
 		 }`, true, []rewrite.Rule{