fix(traefik): generate Host rules only when host present and normalize paths #7289 #7290
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #7289
PR Description
This PR improves Traefik rule generation by ensuring Host() is only emitted when a host value actually exists, and by normalizing paths so that all middleware, regex, StripPrefix, and router labels use consistent values.
What’s changed:
*Added a new buildTraefikRule helper to centralize rule construction.
*Normalized path handling (treat '' and '/' as no-path).
*Ensured PathPrefix() receives a properly normalized path (leading slash enforced).
*Prevented invalid configurations like: Host("") && PathPrefix(coolify.io). which previously caused 404 routing failures.
*Updated the code to rely on normalized path values from fqdnLabelsForTraefik / fqdnLabelsForCaddy.
Why
Previously, empty hosts combined with non-normalized paths resulted in Traefik misrouting — especially cases where the router generated Host("").
This PR eliminates those invalid rules and ensures predictable routing behavior.
Testing
Verified rule output from the helper for all combinations:
*host only
*path only
*both
*neither (falls back to PathPrefix(/))
*Confirmed Traefik labels no longer include empty hosts.
*Verified middleware + ghost regex + StripPrefix use normalized paths.
Files Changed
docker.php