map
Устанавливает значения пользовательских плейсхолдеров, переключаемых на значение ввода.
Сравнивает исходное значение со значением ввода в соответствии с картой, и для совпадения применяет выходное значение(я) к каждому назначению. Назначения становятся именами плейсхолдеров. Также могут быть указаны значения по умолчанию для каждого назначения.
Отображаемые плейсхолдеры не оцениваются, пока они не используются, поэтому даже для очень больших сопоставлений эта директива достаточно эффективна.
Синтаксис
-
<source> — входное значение для активации. Обычно плейсхолдер.
-
<destinations...> — плейсхолдеры для создания, которые содержат выходные значения.
-
<input> — значение ввода для сопоставления. Если начинается с
~, оно обрабатывается как регулярное выражение. -
<outputs...> — одно или несколько выходных значений для хранения в связанном плейсхолдере. Первое выходное значение записывается в первое назначение, второе выходное значение — во второе назначение и т. д.
В качестве специального случая, парсер Caddyfile обрабатывает выходные значения, являющиеся литеральной дефисом (
-), как значения null/nil. Это полезно, если вы хотите использовать значение по умолчанию для данного вывода в случае заданного входа, но хотите использовать значения, отличные от значения по умолчанию, для других выходов.Выходные значения будут преобразованы в соответствующие типы, если это возможно;
trueиfalseбудут преобразованы в булевы типы, а числовые значения — в целые или вещественные числа соответственно. Чтобы избежать этого преобразования, можно обернуть выходные значения в кавычки, и они останутся строками.Количество выходов для каждого сопоставления не должно превышать количества назначений; однако для удобства может быть меньше выходов, чем назначений, и любые недостающие выходы будут неявно заполнены.
Если в качестве входного значения использовалось регулярное выражение, то группы захвата можно ссылаться с помощью
${group}, гдеgroup— это имя или номер группы захвата в выражении. Группа захвата0— это полное совпадение с regexp,1— первая группа захвата,2— вторая группа захвата и т. д. -
<default> — определяет выходные значения для хранения, если ни один вход не совпадает.
Примеры
Следующий пример демонстрирует большинство аспектов этой директивы:
Эта директива переключается на значение {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.