文件
一個 專案

map

根據輸入值設定自訂佔位符的值。

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

映射的佔位符在被使用之前不會被評估,因此即使對於非常大的映射,此指令也非常有效率。

語法

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

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

  • <input> 是要匹配的輸入值。如果以 ~ 作為前綴,則會被視為正規表示式。

  • <outputs...> 是一個或多個要儲存在相關佔位符中的輸出值。第一個輸出會寫入第一個目標,第二個輸出會寫入第二個目標,依此類推。

    作為一個特例,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