diff --git a/templates/haproxy_cfg b/templates/haproxy_cfg
index 747e2b2d98cbd5c456dc48d13ac6ee81bbdc6095..1974db71a0897d52e41010eb1aba7455c6f86933 100644
--- a/templates/haproxy_cfg
+++ b/templates/haproxy_cfg
@@ -67,7 +67,7 @@ frontend http_in
 {% for from in redirect.from %}
 {% for path in redirect.paths|default([]) %}
 {% if path.deny|default(false) %}
-  http-request deny if { hdr(host) -i -n {{from}}{% if path.from is defined %} } { path_beg /{{path.from}}{% endif %} }
+  http-request deny if { hdr(host) -i -n {{from}}{% if path.from is defined %} } { {{path.exact|default(false)|ternary('path','path_beg')}} /{{path.from}}{% endif %} }
 {% endif %}
 {% endfor %}
 {% endfor %}
@@ -78,10 +78,12 @@ frontend http_in
 {% for from in redirect.from %}
 {% for path in redirect.paths|default([]) %}
 {% if not path.deny|default(false) %}
-  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_beg /{{path.from}}{% endif %} }
+  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 %}
 {% 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}} }
+{% endif %}
 {% endfor %}
 {% endfor %}
 {% if proxy_redirect_aliase %}
@@ -143,7 +145,7 @@ frontend https_in_{{ cert.ip }}
 {% for from in redirect.from %}
 {% for path in redirect.paths|default([]) %}
 {% if path.deny|default(false) %}
-  http-request deny if { hdr(host) -i -n {{from}}{% if path.from is defined %} } { path_beg /{{path.from}}{% endif %} }
+  http-request deny if { hdr(host) -i -n {{from}}{% if path.from is defined %} } { {{path.exact|default(false)|ternary('path','path_beg')}} /{{path.from}}{% endif %} }
 {% endif %}
 {% endfor %}
 {% endfor %}
@@ -154,10 +156,12 @@ frontend https_in_{{ cert.ip }}
 {% for from in redirect.from %}
 {% for path in redirect.paths|default([]) %}
 {% if not path.deny|default(false) %}
-  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_beg /{{path.from}}{% endif %} }
+  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 %}
 {% 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}} }
+{% endif %}
 {% endfor %}
 {% endfor %}
 {% if proxy_redirect_aliase %}