diff --git a/src/Assets/AssetContainer.php b/src/Assets/AssetContainer.php index 86263865e7..29765fce49 100644 --- a/src/Assets/AssetContainer.php +++ b/src/Assets/AssetContainer.php @@ -27,7 +27,6 @@ use Statamic\Facades\Stache; use Statamic\Facades\URL; use Statamic\Support\Arr; -use Statamic\Support\Str; use Statamic\Support\Traits\FluentlyGetsAndSets; class AssetContainer implements Arrayable, ArrayAccess, AssetContainerContract, Augmentable @@ -139,9 +138,7 @@ public function url() return null; } - $url = (string) Str::of($this->disk()->url('/')) - ->rtrim('/') - ->after(config('app.url')); + $url = rtrim($this->disk()->url('/'), '/'); return ($url === '') ? '/' : $url; } diff --git a/src/Tags/Glide.php b/src/Tags/Glide.php index f34deb64d5..3327663112 100644 --- a/src/Tags/Glide.php +++ b/src/Tags/Glide.php @@ -279,6 +279,10 @@ private function normalizeItem($item) return $item; } + if (Str::startsWith($item, config('app.url'))) { + $item = Str::after($item, config('app.url')); + } + // External URLs are already fine as-is. if (Str::startsWith($item, ['http://', 'https://'])) { return $item; diff --git a/tests/Assets/AssetContainerTest.php b/tests/Assets/AssetContainerTest.php index 9bc8f92ffe..507c735879 100644 --- a/tests/Assets/AssetContainerTest.php +++ b/tests/Assets/AssetContainerTest.php @@ -137,21 +137,6 @@ public function it_gets_the_url_from_the_disk_config_when_its_relative() $this->assertEquals('http://localhost/container', $container->absoluteUrl()); } - #[Test] - public function it_gets_the_url_from_the_disk_config_when_its_app_url() - { - config(['filesystems.disks.test' => [ - 'driver' => 'local', - 'root' => __DIR__.'/__fixtures__/container', - 'url' => 'http://localhost/container', - ]]); - - $container = (new AssetContainer)->disk('test'); - - $this->assertEquals('/container', $container->url()); - $this->assertEquals('http://localhost/container', $container->absoluteUrl()); - } - #[Test] public function its_private_if_the_disk_has_no_url() { diff --git a/tests/Tags/GlideTest.php b/tests/Tags/GlideTest.php index 69bac8773e..aae0616e1e 100644 --- a/tests/Tags/GlideTest.php +++ b/tests/Tags/GlideTest.php @@ -67,6 +67,20 @@ public function it_outputs_a_data_url() $this->assertStringStartsWith('data:image/jpeg;base64', (string) Parse::template($tag, ['foo' => 'bar.jpg'])); } + #[Test] + #[DefineEnvironment('absoluteHttpRouteUrlWithoutCache')] + /** + * https://github.com/statamic/cms/pull/11839 + */ + public function it_treats_assets_urls_starting_with_the_app_url_as_internal_assets() + { + $this->createImageInPublicDirectory(); + + $result = (string) Parse::template('{{ glide:foo width="100" }}', ['foo' => 'http://localhost/glide/bar.jpg']); + + $this->assertStringStartsWith('/img/glide/bar.jpg', $result); + } + public function relativeRouteUrl($app) { $this->configureGlideCacheDiskWithUrl($app, '/glide'); @@ -77,12 +91,17 @@ public function absoluteHttpRouteUrl($app) $this->configureGlideCacheDiskWithUrl($app, 'http://localhost/glide'); } + public function absoluteHttpRouteUrlWithoutCache($app) + { + $this->configureGlideCacheDiskWithUrl($app, 'http://localhost/glide', false); + } + public function absoluteHttpsRouteUrl($app) { $this->configureGlideCacheDiskWithUrl($app, 'https://localhost/glide'); } - private function configureGlideCacheDiskWithUrl($app, $url) + private function configureGlideCacheDiskWithUrl($app, $url, $cache = 'glide') { $app['config']->set('filesystems.disks.glide', [ 'driver' => 'local', @@ -90,7 +109,7 @@ private function configureGlideCacheDiskWithUrl($app, $url) 'url' => $url, 'visibility' => 'public', ]); - $app['config']->set('statamic.assets.image_manipulation.cache', 'glide'); + $app['config']->set('statamic.assets.image_manipulation.cache', $cache); } private function createImageInPublicDirectory()