From 36e9061fe982b4aac9512d54e6cffefdaeb0f82f Mon Sep 17 00:00:00 2001 From: indy koning Date: Mon, 12 May 2025 17:12:59 +0200 Subject: [PATCH 1/8] Redirect absolute domains ending in . to regular domain --- config/routes.php | 15 ++++++++++ .../Middleware/RedirectAbsoluteDomains.php | 29 +++++++++++++++++++ src/Providers/AppServiceProvider.php | 4 +++ 3 files changed, 48 insertions(+) create mode 100644 src/Http/Middleware/RedirectAbsoluteDomains.php diff --git a/config/routes.php b/config/routes.php index 95a6427684..ce707b21f5 100644 --- a/config/routes.php +++ b/config/routes.php @@ -29,6 +29,21 @@ 'bindings' => false, + /* + |-------------------------------------------------------------------------- + | Enable Absolute Domain Redirects + |-------------------------------------------------------------------------- + | + | Whether to redirect absolute domains ending in a dot to the + | corresponding domain without a dot. This is useful for + | preventing issues with browsers and DNS resolvers. + | + | see: https://www.rfc-editor.org/rfc/rfc1035#:~:text=Domain%20names%20that%20end%20in%20a%20dot%20are%20called%0Aabsolute%2C%20and%20are%20taken%20as%20complete + | + */ + + 'absolute_domain_redirect' => true, + /* |-------------------------------------------------------------------------- | Action Route Prefix diff --git a/src/Http/Middleware/RedirectAbsoluteDomains.php b/src/Http/Middleware/RedirectAbsoluteDomains.php new file mode 100644 index 0000000000..6f9e4d3bda --- /dev/null +++ b/src/Http/Middleware/RedirectAbsoluteDomains.php @@ -0,0 +1,29 @@ +getHost(); + + if (!config('statamic.routes.absolute_domain_redirect', true) || !Str::endsWith($host, '.')) { + return $next($request); + } + + return redirect()->to(Str::replaceFirst($host, rtrim($host, '.'), $request->fullUrl()), 308); + } +} diff --git a/src/Providers/AppServiceProvider.php b/src/Providers/AppServiceProvider.php index ada744379f..9512a6c6b0 100644 --- a/src/Providers/AppServiceProvider.php +++ b/src/Providers/AppServiceProvider.php @@ -194,6 +194,10 @@ protected function registerMiddlewareGroup() \Statamic\Http\Middleware\AuthGuard::class, \Statamic\StaticCaching\Middleware\Cache::class, ])->each(fn ($middleware) => $router->pushMiddlewareToGroup('statamic.web', $middleware)); + + collect([ + \Statamic\Http\Middleware\RedirectAbsoluteDomains::class, + ])->each(fn ($middleware) => $router->pushMiddlewareToGroup('web', $middleware)); } protected function addAboutCommandInfo() From 2976a19d9376d3cbb694857c50f63d90476f4205 Mon Sep 17 00:00:00 2001 From: indy koning Date: Mon, 12 May 2025 17:14:10 +0200 Subject: [PATCH 2/8] Fixed docblock --- src/Http/Middleware/RedirectAbsoluteDomains.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Middleware/RedirectAbsoluteDomains.php b/src/Http/Middleware/RedirectAbsoluteDomains.php index 6f9e4d3bda..7fdfe24626 100644 --- a/src/Http/Middleware/RedirectAbsoluteDomains.php +++ b/src/Http/Middleware/RedirectAbsoluteDomains.php @@ -12,7 +12,7 @@ class RedirectAbsoluteDomains * Handle an incoming request. * * @param \Illuminate\Http\Request $request - * @param string|null $guard + * @param Closure $next * @return mixed */ public function handle($request, Closure $next) From 10aac1d7b6d25ebb0c4c42af148237b54c91af22 Mon Sep 17 00:00:00 2001 From: indy koning Date: Mon, 12 May 2025 17:26:06 +0200 Subject: [PATCH 3/8] Make linter happy --- src/Http/Middleware/RedirectAbsoluteDomains.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Http/Middleware/RedirectAbsoluteDomains.php b/src/Http/Middleware/RedirectAbsoluteDomains.php index 7fdfe24626..f66db4e63c 100644 --- a/src/Http/Middleware/RedirectAbsoluteDomains.php +++ b/src/Http/Middleware/RedirectAbsoluteDomains.php @@ -12,7 +12,6 @@ class RedirectAbsoluteDomains * Handle an incoming request. * * @param \Illuminate\Http\Request $request - * @param Closure $next * @return mixed */ public function handle($request, Closure $next) @@ -20,7 +19,7 @@ public function handle($request, Closure $next) /** @var Request $request */ $host = $request->getHost(); - if (!config('statamic.routes.absolute_domain_redirect', true) || !Str::endsWith($host, '.')) { + if (! config('statamic.routes.absolute_domain_redirect', true) || !Str::endsWith($host, '.')) { return $next($request); } From 51b239e1ea20915050772849314b4c867dd0dd11 Mon Sep 17 00:00:00 2001 From: indy koning Date: Mon, 12 May 2025 17:28:48 +0200 Subject: [PATCH 4/8] Missed one --- src/Http/Middleware/RedirectAbsoluteDomains.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Middleware/RedirectAbsoluteDomains.php b/src/Http/Middleware/RedirectAbsoluteDomains.php index f66db4e63c..ba849970e5 100644 --- a/src/Http/Middleware/RedirectAbsoluteDomains.php +++ b/src/Http/Middleware/RedirectAbsoluteDomains.php @@ -19,7 +19,7 @@ public function handle($request, Closure $next) /** @var Request $request */ $host = $request->getHost(); - if (! config('statamic.routes.absolute_domain_redirect', true) || !Str::endsWith($host, '.')) { + if (! config('statamic.routes.absolute_domain_redirect', true) || ! Str::endsWith($host, '.')) { return $next($request); } From 9d52aa6bfde8aeed23029cbd58fdf1dcdb840735 Mon Sep 17 00:00:00 2001 From: indy koning Date: Tue, 13 May 2025 09:50:12 +0200 Subject: [PATCH 5/8] Call pushMiddlewareToGroup directly --- src/Providers/AppServiceProvider.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Providers/AppServiceProvider.php b/src/Providers/AppServiceProvider.php index 9512a6c6b0..14c39c3add 100644 --- a/src/Providers/AppServiceProvider.php +++ b/src/Providers/AppServiceProvider.php @@ -195,9 +195,7 @@ protected function registerMiddlewareGroup() \Statamic\StaticCaching\Middleware\Cache::class, ])->each(fn ($middleware) => $router->pushMiddlewareToGroup('statamic.web', $middleware)); - collect([ - \Statamic\Http\Middleware\RedirectAbsoluteDomains::class, - ])->each(fn ($middleware) => $router->pushMiddlewareToGroup('web', $middleware)); + $router->pushMiddlewareToGroup('web', \Statamic\Http\Middleware\RedirectAbsoluteDomains::class); } protected function addAboutCommandInfo() From a8f0d8f0e6b796f9867de120229e7a6cb4bd7dc1 Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Tue, 13 May 2025 15:57:06 -0400 Subject: [PATCH 6/8] Remove config --- config/routes.php | 15 --------------- src/Http/Middleware/RedirectAbsoluteDomains.php | 2 +- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/config/routes.php b/config/routes.php index ce707b21f5..95a6427684 100644 --- a/config/routes.php +++ b/config/routes.php @@ -29,21 +29,6 @@ 'bindings' => false, - /* - |-------------------------------------------------------------------------- - | Enable Absolute Domain Redirects - |-------------------------------------------------------------------------- - | - | Whether to redirect absolute domains ending in a dot to the - | corresponding domain without a dot. This is useful for - | preventing issues with browsers and DNS resolvers. - | - | see: https://www.rfc-editor.org/rfc/rfc1035#:~:text=Domain%20names%20that%20end%20in%20a%20dot%20are%20called%0Aabsolute%2C%20and%20are%20taken%20as%20complete - | - */ - - 'absolute_domain_redirect' => true, - /* |-------------------------------------------------------------------------- | Action Route Prefix diff --git a/src/Http/Middleware/RedirectAbsoluteDomains.php b/src/Http/Middleware/RedirectAbsoluteDomains.php index ba849970e5..07ba354a07 100644 --- a/src/Http/Middleware/RedirectAbsoluteDomains.php +++ b/src/Http/Middleware/RedirectAbsoluteDomains.php @@ -19,7 +19,7 @@ public function handle($request, Closure $next) /** @var Request $request */ $host = $request->getHost(); - if (! config('statamic.routes.absolute_domain_redirect', true) || ! Str::endsWith($host, '.')) { + if (! Str::endsWith($host, '.')) { return $next($request); } From 2eb81dec18824e48cd257c9a12c67aca01bbf30c Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Tue, 13 May 2025 15:57:16 -0400 Subject: [PATCH 7/8] Don't automatically use middleware --- src/Providers/AppServiceProvider.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Providers/AppServiceProvider.php b/src/Providers/AppServiceProvider.php index 14c39c3add..ada744379f 100644 --- a/src/Providers/AppServiceProvider.php +++ b/src/Providers/AppServiceProvider.php @@ -194,8 +194,6 @@ protected function registerMiddlewareGroup() \Statamic\Http\Middleware\AuthGuard::class, \Statamic\StaticCaching\Middleware\Cache::class, ])->each(fn ($middleware) => $router->pushMiddlewareToGroup('statamic.web', $middleware)); - - $router->pushMiddlewareToGroup('web', \Statamic\Http\Middleware\RedirectAbsoluteDomains::class); } protected function addAboutCommandInfo() From 96ce70a7fc2f5181ec36a1eae59300be8f118b90 Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Tue, 13 May 2025 15:57:26 -0400 Subject: [PATCH 8/8] docblock is already typing it --- src/Http/Middleware/RedirectAbsoluteDomains.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Http/Middleware/RedirectAbsoluteDomains.php b/src/Http/Middleware/RedirectAbsoluteDomains.php index 07ba354a07..bd93b15eee 100644 --- a/src/Http/Middleware/RedirectAbsoluteDomains.php +++ b/src/Http/Middleware/RedirectAbsoluteDomains.php @@ -16,7 +16,6 @@ class RedirectAbsoluteDomains */ public function handle($request, Closure $next) { - /** @var Request $request */ $host = $request->getHost(); if (! Str::endsWith($host, '.')) {