protected function _urlChunk($url = null)
    {
        if (empty($url)) {
            $url = '/' . $this->_controller->request->url;
        }

        $cacheKey = 'urlChunk_' . md5($url);
        $cache = static::cache($cacheKey);

        if ($cache !== null) {
            return $cache;
        }

        $parsedURL = Router::parse($url);
        $out = [$url];
        $passArguments = [];

        if (!empty($parsedURL['?'])) {
            unset($parsedURL['?']);
        }

        if (!empty($parsedURL['pass'])) {
            $passArguments = $parsedURL['pass'];
            $parsedURL['pass'] = null;
            $parsedURL = array_merge($parsedURL, $passArguments);
        }

        // "/controller_name/index" -> "/controller"
        if ($parsedURL['action'] === 'index') {
            $parsedURL['action'] = null;
            $out[] = Router::url($parsedURL);
        }

        // "/plugin_name/plugin_name/action_name" -> "/plugin_name/action_name"
        if (!empty($parsedURL['plugin']) &&
            strtolower($parsedURL['controller']) === strtolower($parsedURL['plugin'])
        ) {
            $parsedURL['plugin'] = null;
            $out[] = Router::url($parsedURL);
        }

        foreach (array_reverse($passArguments) as $pass) {
            unset($parsedURL[array_search($pass, $parsedURL)]);
            $out[] = Router::url($parsedURL);
        }

        $out = array_map(function ($value) {
            if (str_starts_with($value, $this->_controller->request->base)) {
                return str_replace_once($this->_controller->request->base, '', $value);
            }

            return $value;
        }, $out);

        return static::cache($cacheKey, array_unique($out));
    }