ドキュメント
プロジェクト

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 に設定されます。