map
入力値に基づいて切り替わるカスタムプレースホルダーの値を設定します。
ソース値をマップの入力側と比較し、一致するものが1つあれば、出力値を各宛先に適用します。宛先はプレースホルダー名になります。各宛先のデフォルトの出力値を指定することもできます。
マップされたプレースホルダーは、使用されるまで評価されないため、非常に大規模なマッピングでも、このディレクティブは非常に効率的です。
構文
map [<matcher>] <source> <destinations...> {
[~]<input> <outputs...>
default <defaults...>
}
-
<source> は、切り替え対象の入力値です。通常はプレースホルダーです。
-
<destinations...> は、出力値を保持する作成するプレースホルダーです。
-
<input> は、一致させる入力値です。
~
が前に付いている場合、正規表現として扱われます。 -
<outputs...> は、関連付けられたプレースホルダーに格納する1つ以上の出力値です。最初の出力は最初の宛先に書き込まれ、2番目の出力は2番目の宛先に書き込まれる、というように続きます。
特別なケースとして、Caddyfileパーサーは、リテラルのハイフン(
-
)である出力をnull/nil値として扱います。これは、特定の入力の場合に、その特定の出力のデフォルト値にフォールバックしたいが、他の出力にはデフォルト以外の値を使用したい場合に役立ちます。可能な場合、出力は型変換されます。
true
およびfalse
はブール型に変換され、数値はそれに応じて整数または浮動小数点数に変換されます。この変換を回避するには、出力を引用符で囲むと、文字列のままになります。各マッピングの出力の数は、宛先の数を超えてはなりません。ただし、便宜上、宛先よりも出力が少なくても構いません。不足している出力は暗黙的に埋められます。
正規表現が入力として使用された場合、キャプチャグループは
${group}
で参照できます。ここで、group
は式内のキャプチャグループの名前または番号です。キャプチャグループ0
は正規表現全体の一致、1
は最初のキャプチャグループ、2
は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}
のみをそれぞれ7
または15
に設定します。{my_placeholder}
は設定しないままにします。 - それ以外の場合(他のすべてのホストの場合)、デフォルト値が適用されます:
{my_placeholder}
はunknown domain
に設定され、{magic_number}
は42
に設定されます。