web: www-Hosts lösen aufs Apex-Domain-Theme auf statt aufs Portal-Fallback
Die Domain-Auflösung matchte den Host exakt gegen domain_name — www.presseecho.de fiel dadurch aufs Portal-Default-Theme zurück, dessen theme-portal.css im Web-Build nicht existiert. Alle Route::view-Seiten ohne Controller (Impressum, Datenschutz, AGB, FAQ, …) antworteten auf www-Hosts mit 500 (ViteException, Dauereintrag im Live-Log); die Controller-Seiten traf es nicht, weil WebPortalContext den Host tolerant matcht. resolve() normalisiert Hosts jetzt (lowercase, www. entfernt) auf beiden Seiten des Vergleichs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
6fcc825c64
commit
e69ded4fed
2 changed files with 42 additions and 2 deletions
|
|
@ -55,7 +55,13 @@ class DomainAssetContext
|
||||||
return array_merge($defaults, $configuredDomains[$themeOverride]);
|
return array_merge($defaults, $configuredDomains[$themeOverride]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$portalHost = (string) config('domains.domain_portal');
|
// www-Varianten zählen als ihre Apex-Domain: Ohne Normalisierung
|
||||||
|
// fiele z. B. www.presseecho.de auf das Portal-Default-Theme zurück,
|
||||||
|
// dessen theme-portal.css im Web-Build nicht existiert → 500
|
||||||
|
// (ViteException) auf allen Route::view-Seiten (Impressum, AGB, …).
|
||||||
|
$host = self::normalizedHost($host);
|
||||||
|
|
||||||
|
$portalHost = self::normalizedHost((string) config('domains.domain_portal'));
|
||||||
|
|
||||||
if ($host === $portalHost) {
|
if ($host === $portalHost) {
|
||||||
$request ??= request();
|
$request ??= request();
|
||||||
|
|
@ -72,7 +78,9 @@ class DomainAssetContext
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($config['domain_name'] ?? null) === $host) {
|
$domainName = $config['domain_name'] ?? null;
|
||||||
|
|
||||||
|
if (is_string($domainName) && self::normalizedHost($domainName) === $host) {
|
||||||
return array_merge($defaults, $config);
|
return array_merge($defaults, $config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -80,6 +88,16 @@ class DomainAssetContext
|
||||||
return $defaults;
|
return $defaults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kleingeschriebener Host ohne führendes "www.".
|
||||||
|
*/
|
||||||
|
private static function normalizedHost(string $host): string
|
||||||
|
{
|
||||||
|
$host = strtolower(trim($host));
|
||||||
|
|
||||||
|
return str_starts_with($host, 'www.') ? substr($host, 4) : $host;
|
||||||
|
}
|
||||||
|
|
||||||
public static function isBackendRequest(Request $request): bool
|
public static function isBackendRequest(Request $request): bool
|
||||||
{
|
{
|
||||||
if ($request->routeIs(
|
if ($request->routeIs(
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,28 @@ test('presseecho resolves to its own web theme', function () {
|
||||||
->and($config['assets_dir'])->toBe('build/web');
|
->and($config['assets_dir'])->toBe('build/web');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('www hosts resolve like their apex domain instead of the portal fallback', function () {
|
||||||
|
$defaults = ['theme' => 'portal', 'assets_dir' => 'build/portal'];
|
||||||
|
$domains = config('domains.domains');
|
||||||
|
|
||||||
|
// Ohne www-Normalisierung fiele der Host aufs Portal-Default zurück,
|
||||||
|
// dessen theme-portal.css im Web-Build fehlt → 500 auf Route::view-Seiten.
|
||||||
|
$config = DomainAssetContext::resolve('www.presseecho.test', $defaults, $domains);
|
||||||
|
|
||||||
|
expect($config['theme'])->toBe('presseecho')
|
||||||
|
->and($config['assets_dir'])->toBe('build/web');
|
||||||
|
|
||||||
|
$hub = DomainAssetContext::resolve(
|
||||||
|
'WWW.pressekonto.test',
|
||||||
|
$defaults,
|
||||||
|
$domains,
|
||||||
|
null,
|
||||||
|
Request::create('https://www.pressekonto.test/', 'GET'),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect($hub['theme'])->toBe('pressekonto');
|
||||||
|
});
|
||||||
|
|
||||||
test('hot file path depends on asset bundle', function () {
|
test('hot file path depends on asset bundle', function () {
|
||||||
expect(DomainAssetContext::hotFilePath('build/web'))
|
expect(DomainAssetContext::hotFilePath('build/web'))
|
||||||
->toEndWith('hot-web')
|
->toEndWith('hot-web')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue