diff --git a/roles/vhost/meta/argument_specs.yaml b/roles/vhost/meta/argument_specs.yaml index e916852..6e2a6d4 100644 --- a/roles/vhost/meta/argument_specs.yaml +++ b/roles/vhost/meta/argument_specs.yaml @@ -378,7 +378,9 @@ argument_specs: elements: dict options: path: - description: Path to match. Only supports full paths for now. + description: >- + Path to match. + If the value begins with ^ and end with $, the value is matched as regex. type: str required: true type: @@ -565,8 +567,7 @@ argument_specs: match_headers: description: >- Headers to match against. - The value is matched as regex. - ^ and $ are implied, so don't add them yourself. + If the value begins with ^ and end with $, the value is matched as regex. type: dict required: false default: {} diff --git a/roles/vhost/templates/Caddyfile_block.j2 b/roles/vhost/templates/Caddyfile_block.j2 index f2982ee..9b228e8 100644 --- a/roles/vhost/templates/Caddyfile_block.j2 +++ b/roles/vhost/templates/Caddyfile_block.j2 @@ -1,7 +1,12 @@ #jinja2: lstrip_blocks: True {{ vhost_domains | join(' ') }} { {% for location in _vhost_locations_complete %} - handle {{ location.path }} { + {% if location.path != '' %} + @{{ location.path }} path{{ '_regexp' if location.path.startswith('^') and location.path.endswith('$') else '' }} {{ location.path }} + handle @{{ location.path }} { + {% else %} + handle { + {% endif %} {% for matcher in location.matchers %} {% if matcher.name != '' %} @{{ matcher.name }} {