labstack/echo · error
echo rewrite middleware requires url path rewrite rules or r
Error message
echo rewrite middleware requires url path rewrite rules or regex rules
What it means
Returned by RewriteConfig.ToMiddleware when both Rules and RegexRules are nil. The middleware has no purpose without at least one rewrite rule; an empty-but-non-nil map is accepted (it simply rewrites nothing), only a totally nil config is rejected.
Source
Thrown at middleware/rewrite.go:59
c := RewriteConfig{}
c.Rules = rules
return RewriteWithConfig(c)
}
// RewriteWithConfig returns a Rewrite middleware or panics on invalid configuration.
//
// Rewrite middleware rewrites the URL path based on the provided rules.
func RewriteWithConfig(config RewriteConfig) echo.MiddlewareFunc {
return toMiddlewareOrPanic(config)
}
// ToMiddleware converts RewriteConfig to middleware or returns an error for invalid configuration
func (config RewriteConfig) ToMiddleware() (echo.MiddlewareFunc, error) {
if config.Skipper == nil {
config.Skipper = DefaultSkipper
}
if config.Rules == nil && config.RegexRules == nil {
return nil, errors.New("echo rewrite middleware requires url path rewrite rules or regex rules")
}
if config.RegexRules == nil {
config.RegexRules = make(map[*regexp.Regexp]string)
}
maps.Copy(config.RegexRules, rewriteRulesRegex(config.Rules))
return func(next echo.HandlerFunc) echo.HandlerFunc {
return func(c *echo.Context) (err error) {
if config.Skipper(c) {
return next(c)
}
if err := rewriteURL(config.RegexRules, c.Request()); err != nil {
return err
}
return next(c)
}View on GitHub (pinned to 05489dc173)
Solutions
- Provide Rules, e.g. Rewrite(map[string]string{"/old/*": "/$1"}).
- If you only have compiled regexps, set RegexRules: map[*regexp.Regexp]string{re: "/v2/$1"}.
- When building rules dynamically, initialise the map even if it may be empty: make(map[string]string).
- Call config.ToMiddleware() to get the error returned rather than panicked.
Example fix
// before
m := middleware.RewriteWithConfig(middleware.RewriteConfig{})
// after
m := middleware.RewriteWithConfig(middleware.RewriteConfig{
Rules: map[string]string{"/old/*": "/$1"},
}) Defensive patterns
Strategy: validation
Validate before calling
func rewriteMiddleware(rules map[string]string) (echo.MiddlewareFunc, error) {
cfg := middleware.RewriteConfig{Rules: rules}
if cfg.Rules == nil && cfg.RegexRules == nil {
return nil, errors.New("Rewrite requires Rules or RegexRules")
}
return cfg.ToMiddleware()
} Prevention
- Provide at least one rule: Rewrite(map[string]string{"/old/*": "/$1"}).
- When building rules dynamically, initialise the map with make(map[string]string) even if it may stay empty.
- Use cfg.ToMiddleware() to receive the error instead of a startup panic.
When it happens
Trigger: Calling RewriteWithConfig(RewriteConfig{}) with neither Rules nor RegexRules set, or Rewrite(nil) (note: Rewrite(map[string]string{}) with an initialised empty map would NOT trigger this).
Common situations: Developer builds rules conditionally and the branch leaves the map nil; or intends to use RegexRules only but forgets to initialise it.
Related errors
- timeout must be set
- at least one AllowOrigins is required or UnsafeAllowOriginFu
- echo key-auth middleware requires a validator function
- echo key-auth middleware could not create extractors from Ke
- echo proxy middleware requires balancer
AI-assisted analysis of labstack/echo@05489dc173 (2026-08-04).
Data as JSON: /data/errors/75136e066255c48f.json.
Report an issue: GitHub.