func redirParse(c *Controller) ([]redirect.Rule, error) { var redirects []redirect.Rule for c.Next() { var rule redirect.Rule args := c.RemainingArgs() // Always set the default Code, then overwrite rule.Code = http.StatusMovedPermanently switch len(args) { case 1: // To specified rule.From = "/" rule.To = args[0] case 2: // To and Code specified rule.From = "/" rule.To = args[0] if "meta" == args[1] { rule.Meta = true } else if code, ok := httpRedirs[args[1]]; !ok { return redirects, c.Err("Invalid redirect code '" + args[1] + "'") } else { rule.Code = code } case 3: // From, To, and Code specified rule.From = args[0] rule.To = args[1] if "meta" == args[2] { rule.Meta = true } else if code, ok := httpRedirs[args[2]]; !ok { return redirects, c.Err("Invalid redirect code '" + args[2] + "'") } else { rule.Code = code } default: return redirects, c.ArgErr() } if rule.From == rule.To { return redirects, c.Err("Redirect rule cannot allow From and To arguments to be the same.") } redirects = append(redirects, rule) } return redirects, nil }