文档
一个 项目

map

根据输入值设置自定义占位符的值。

它将源值与映射的输入端进行比较,并对匹配的输入端,将输出值应用于每个目标。目标将成为占位符名称。还可以为每个目标指定默认输出值。

映射的占位符直到使用时才会被评估,因此即使对于非常大的映射,此指令也非常高效。

语法

map [<matcher>] <source> <destinations...> {
	[~]<input> <outputs...>
	default    <defaults...>
}
  • <source> 是要切换的输入值。通常是一个占位符。

  • <destinations...> 是要创建的包含输出值的占位符。

  • <input> 是要匹配的输入值。如果以 ~ 为前缀,则将其视为正则表达式。

  • <outputs...> 是一个或多个要存储在关联占位符中的输出值。第一个输出写入第一个目标,第二个输出写入第二个目标,依此类推。

    作为特殊情况,Caddyfile 解析器将文字连字符 (-) 作为输出视为空/nil 值。如果您想在给定输入的情况下回退到该特定输出的默认值,但想对其他输出使用非默认值,这将非常有用。

    如果可能,输出将被类型转换;truefalse 将被转换为布尔类型,数值将被相应地转换为整数或浮点数。要避免这种转换,您可以用 引号 将输出括起来,它们将保持字符串类型。

    每个映射的输出数量不得超过目标数量;但是,为了方便起见,输出数量可能少于目标数量,任何缺失的输出将被隐式填充。

    如果正则表达式用作输入,则可以使用 ${group} 引用捕获组,其中 group 是表达式中捕获组的名称或编号。捕获组 0 是完整的正则表达式匹配,1 是第一个捕获组,2 是第二个捕获组,依此类推。

  • <default> 指定如果没有任何输入匹配,则要存储的输出值。

示例

以下示例演示了此指令的大多数方面

map {host}                {my_placeholder}  {magic_number} {
	example.com           "some value"      3
	foo.example.com       "another value"
	~(.*)\.example\.com$  "${1} subdomain"  5

	~.*\.net$             -                 7
	~.*\.xyz$             -                 15

	default               "unknown domain"  42
}

此指令根据 {host} 的值进行切换,即请求的域名。

  • 如果请求针对 example.com,则将 {my_placeholder} 设置为 some value,并将 {magic_number} 设置为 3
  • 否则,如果请求针对 foo.example.com,则将 {my_placeholder} 设置为 another value,并将 {magic_number} 设为默认值 42
  • 否则,如果请求针对 example.com 的任何子域名,则将 {my_placeholder} 设置为包含第一个正则表达式捕获组值的字符串,即整个子域名,并将 {magic_number} 设置为 5。
  • 否则,如果请求针对任何以 .net.xyz 结尾的主机,则仅将 {magic_number} 设置为 715,分别。让 {my_placeholder} 未设置。
  • 否则(对于所有其他主机),将应用默认值:{my_placeholder} 将被设置为 unknown domain{magic_number} 将被设置为 42