map
設定自訂佔位符的值,並在輸入值中切換。
它會將來源值與 map 的輸入端進行比較,並針對相符的項目,將輸出值套用至每個目的地。目的地會變成佔位符名稱。也可以為每個目的地指定預設輸出值。
已對應的佔位符在使用前不會進行評估,因此即使對應關係非常龐大,此指令仍然非常有效率。
語法
map [<matcher>] <source> <destinations...> {
[~]<input> <outputs...>
default <defaults...>
}
-
<來源> 是要切換的輸入值。通常是佔位符。
-
<目的地...> 是要建立的佔位符,用於儲存輸出值。
-
<輸入> 是要比對的輸入值。如果以
~
為字首,則會將其視為正規表示式。 -
<輸出...> 是要儲存在關聯佔位符中的輸出值。第一個輸出會寫入第一個目的地,第二個輸出會寫入第二個目的地,以此類推。
作為特殊情況,Caddyfile 剖析器會將輸出值為連字號 (
-
) 的視為 null/nil 值。這在您想要針對特定輸出使用預設值,但想要對其他輸出使用非預設值時很有用。如果可能,輸出會進行類型轉換;
true
和false
會轉換為布林類型,而數字值會依序轉換為整數或浮點數。若要避免此轉換,您可以使用 引號 包住輸出,它們會保持為字串。每個對應關係的輸出數量不得超過目的地數量;但是,為了方便,輸出數量可以少於目的地數量,而任何遺漏的輸出都會隱含填入。
如果使用正規表示式作為輸入,則可以使用
${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}
分別設定為7
或15
。讓{my_placeholder}
保持未設定。 - 否則(對於所有其他主機),將套用預設值:
{my_placeholder}
將設定為unknown domain
,而{magic_number}
將設定為42
。