diff --git a/src/Facades/Endpoint/URL.php b/src/Facades/Endpoint/URL.php index 8bc6e8f0b75..e4e41d3eca9 100644 --- a/src/Facades/Endpoint/URL.php +++ b/src/Facades/Endpoint/URL.php @@ -438,11 +438,11 @@ private function ensureSiteCaches(): void $sites = Site::all(); self::$hasRelativeSiteCache = $sites->contains( - fn ($site) => Str::startsWith((string) ($site->rawConfig()['url'] ?? ''), '/') + fn ($site) => Str::startsWith((string) $site->url(), '/') ); self::$absoluteSiteUrlsCache = $sites - ->map(fn ($site) => $site->rawConfig()['url'] ?? null) + ->map(fn ($site) => $site->url()) ->filter(fn ($siteUrl) => self::isAbsolute($siteUrl)) ->map(fn ($siteUrl) => self::getDomainFromAbsolute($siteUrl)); diff --git a/tests/Facades/UrlTest.php b/tests/Facades/UrlTest.php index 5ec9e778100..e222e22dff7 100644 --- a/tests/Facades/UrlTest.php +++ b/tests/Facades/UrlTest.php @@ -314,6 +314,41 @@ public function it_does_not_trust_current_request_domain_when_no_sites_are_relat $this->assertFalse(URL::isExternalToApplication('http://this-site.com/')); } + #[Test] + public function it_determines_external_url_to_application_when_site_urls_are_configured_with_antlers() + { + config(['app.frontend_url' => 'http://frontend-site.com']); + + $this->setSites([ + 'en' => ['name' => 'English', 'locale' => 'en_US', 'url' => '{{ config:app:frontend_url }}'], + 'fr' => ['name' => 'French', 'locale' => 'fr_FR', 'url' => '{{ config:app:frontend_url }}/fr'], + ]); + + $this->assertFalse(URL::isExternalToApplication('http://frontend-site.com/')); + $this->assertFalse(URL::isExternalToApplication('http://frontend-site.com/fr/')); + $this->assertTrue(URL::isExternalToApplication('http://external-site.com/')); + } + + #[Test] + public function it_tidies_urls_on_site_hosts_configured_with_antlers() + { + config(['app.frontend_url' => 'http://frontend-site.com']); + + $this->setSites([ + 'en' => ['name' => 'English', 'locale' => 'en_US', 'url' => '{{ config:app:frontend_url }}'], + 'fr' => ['name' => 'French', 'locale' => 'fr_FR', 'url' => '{{ config:app:frontend_url }}/fr'], + ]); + + $this->assertSame('http://frontend-site.com', URL::tidy('http://frontend-site.com/')); + $this->assertSame('http://frontend-site.com/fr', URL::tidy('http://frontend-site.com/fr/')); + $this->assertSame('http://external-site.com/page/', URL::tidy('http://external-site.com/page/')); + + URL::enforceTrailingSlashes(); + + $this->assertSame('http://frontend-site.com/fr/', URL::tidy('http://frontend-site.com/fr')); + $this->assertSame('http://external-site.com/page', URL::tidy('http://external-site.com/page')); + } + #[Test] #[DataProvider('assembleProvider')] public function it_can_assemble_urls($segments, $assembled)