public static function makeRelative($url, $baseUrl)
    {
        Assert::string($url, 'The URL must be a string. Got: %s');
        Assert::string($baseUrl, 'The base URL must be a string. Got: %s');
        Assert::contains($baseUrl, '://', '%s is not an absolute Url.');

        list($baseHost, $basePath) = self::split($baseUrl);

        if (false === strpos($url, '://')) {
            if (0 === strpos($url, '/')) {
                $host = $baseHost;
            } else {
                $host = '';
            }
            $path = $url;
        } else {
            list($host, $path) = self::split($url);
        }

        if ('' !== $host && $host !== $baseHost) {
            throw new InvalidArgumentException(sprintf(
                'The URL "%s" cannot be made relative to "%s" since their host names are different.',
                $host,
                $baseHost
            ));
        }

        return Path::makeRelative($path, $basePath);
    }