コード例 #1
0
ファイル: redir.go プロジェクト: bigtiger/caddy
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
}