diff --git a/templates/haproxy_cfg b/templates/haproxy_cfg
index 46cf9c8ef88446807791e303d5de5d5ae4423a15..02fa5dfca7f2bd40b812e502a7dc80b3f96cb549 100644
--- a/templates/haproxy_cfg
+++ b/templates/haproxy_cfg
@@ -78,8 +78,12 @@ frontend http_in
 {% for from in redirect.from %}
 {% for path in redirect.paths|default([]) %}
 {% if not path.deny|default(false) %}
+{% if path.regex is defined and path.from is defined %}
+  http-request redirect code 301 location %[capture.req.uri,regsub({{path.regex}},)] if { hdr(host) -i -n {{from}} } { path_beg /{{path.from}} }
+{% else %}
   redirect location {{ redirect.protocol|default('https') }}://{{redirect.to}}/{{path.to|default('')}} code 301 if { hdr(host) -i -n {{from}}{% if path.from is defined %} } { {{path.exact|default(false)|ternary('path','path_beg')}} /{{path.from}}{% endif %} }
 {% endif %}
+{% endif %}
 {% endfor %}
 {% if from != redirect.to or redirect.protocol|default('https') == 'https' %}
   redirect prefix {{ redirect.protocol|default('https') }}://{{redirect.to}} code 301 if { hdr(host) -i -n {{from}} }
@@ -156,8 +160,12 @@ frontend https_in_{{ cert.ip }}
 {% for from in redirect.from %}
 {% for path in redirect.paths|default([]) %}
 {% if not path.deny|default(false) %}
+{% if path.regex is defined and path.from is defined %}
+  http-request redirect code 301 location %[capture.req.uri,regsub({{path.regex}},)] if { hdr(host) -i -n {{from}} } { path_beg /{{path.from}} }
+{% else %}
   redirect location {{ redirect.protocol|default('https') }}://{{redirect.to}}/{{path.to|default('')}} code 301 if { hdr(host) -i -n {{from}}{% if path.from is defined %} } { {{path.exact|default(false)|ternary('path','path_beg')}} /{{path.from}}{% endif %} }
 {% endif %}
+{% endif %}
 {% endfor %}
 {% if from != redirect.to or redirect.protocol|default('https') != 'https' %}
   redirect prefix {{ redirect.protocol|default('https') }}://{{redirect.to}} code 301 if { hdr(host) -i -n {{from}} }