$segment !== ''); foreach ($segments as $segment) { if ($segment === '.' || $segment === '..') { return null; } } return '/'.implode('/', $segments); } /** @return list */ public static function tenantKeyCandidates(mixed $domain, mixed $path): array { $host = self::normalize($domain); $normalizedPath = self::normalizePath($path); if ($host === null || $normalizedPath === null) { return []; } $segments = array_values(array_filter( explode('/', $normalizedPath), static fn (string $segment): bool => $segment !== '', )); $candidates = []; while ($segments !== []) { $candidates[] = $host.'/'.implode('/', $segments); array_pop($segments); } $candidates[] = $host; return $candidates; } }