From 03072ffcd86b6cbc1d5014effbc61e9a0e554dc7 Mon Sep 17 00:00:00 2001 From: Vitor Rodrigues Date: Fri, 3 Sep 2021 15:45:59 +0200 Subject: [PATCH] Don't use only the current uri to determine the domain when an culture is specified --- src/Umbraco.Core/Routing/DomainUtilities.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Core/Routing/DomainUtilities.cs b/src/Umbraco.Core/Routing/DomainUtilities.cs index eb25496a68..f103307ce7 100644 --- a/src/Umbraco.Core/Routing/DomainUtilities.cs +++ b/src/Umbraco.Core/Routing/DomainUtilities.cs @@ -190,7 +190,7 @@ namespace Umbraco.Cms.Core.Routing } // look for domains that would be the base of the uri - var baseDomains = SelectByBase(considerForBaseDomains, uri); + var baseDomains = SelectByBase(considerForBaseDomains, uri, culture); if (baseDomains.Count > 0) // found, return return baseDomains.First(); @@ -208,12 +208,15 @@ namespace Umbraco.Cms.Core.Routing private static bool IsBaseOf(DomainAndUri domain, Uri uri) => domain.Uri.EndPathWithSlash().IsBaseOf(uri); - private static IReadOnlyCollection SelectByBase(IReadOnlyCollection domainsAndUris, Uri uri) + private static bool MatchesCulture(DomainAndUri domain, string culture) + => culture == null || domain.Culture == culture; + + private static IReadOnlyCollection SelectByBase(IReadOnlyCollection domainsAndUris, Uri uri, string culture) { // look for domains that would be the base of the uri // ie current is www.example.com/foo/bar, look for domain www.example.com var currentWithSlash = uri.EndPathWithSlash(); - var baseDomains = domainsAndUris.Where(d => IsBaseOf(d, currentWithSlash)).ToList(); + var baseDomains = domainsAndUris.Where(d => IsBaseOf(d, currentWithSlash) && MatchesCulture(d, culture)).ToList(); // if none matches, try again without the port // ie current is www.example.com:1234/foo/bar, look for domain www.example.com