文件
一個 專案

map

設定自訂佔位符的值,並在輸入值中切換。

它會將來源值與 map 的輸入端進行比較,並針對相符的項目,將輸出值套用至每個目的地。目的地會變成佔位符名稱。也可以為每個目的地指定預設輸出值。

已對應的佔位符在使用前不會進行評估,因此即使對應關係非常龐大,此指令仍然非常有效率。

語法

map [<matcher>] <source> <destinations...> {
	[~]<input> <outputs...>
	default    <defaults...>
}
  • <來源> 是要切換的輸入值。通常是佔位符。

  • <目的地...> 是要建立的佔位符,用於儲存輸出值。

  • <輸入> 是要比對的輸入值。如果以 ~ 為字首,則會將其視為正規表示式。

  • <輸出...> 是要儲存在關聯佔位符中的輸出值。第一個輸出會寫入第一個目的地,第二個輸出會寫入第二個目的地,以此類推。

    作為特殊情況,Caddyfile 剖析器會將輸出值為連字號 (-) 的視為 null/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