/**
  * [find404PageForError description]
  * @param  Error  $error [description]
  * @return \R3H6\Error404page\Domain\Model\Page|null
  */
 public function find404PageForError(Error $error)
 {
     $doktype = (int) $this->extensionConfiguration->get('doktypeError404page');
     $page = $this->findFirstByHostAndDoktype($error->getHost(), $doktype);
     if ($page === null) {
         $page = $this->findFirstWithoutHostByDoktype($doktype);
     }
     return $page;
 }
 /**
  * Creates a http request
  *
  * @param  string $url
  * @return \TYPO3\CMS\Core\Http\HttpRequest
  */
 protected function getHttpRequest($url)
 {
     $url .= strpos($url, '?') === false ? '?' : '&';
     $url .= '&tx_error404page_request=' . uniqid();
     /** @var \TYPO3\CMS\Core\Http\HttpRequest $request */
     $request = GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Http\\HttpRequest', $url);
     $feCookieName = $GLOBALS['TYPO3_CONF_VARS']['FE']['cookieName'];
     // Forward cookies.
     $request->setCookieJar(true);
     if (isset($_COOKIE[$feCookieName]) && !empty($_COOKIE[$feCookieName])) {
         $request->addCookie($feCookieName, $_COOKIE[$feCookieName]);
     }
     // TYPO3 uses user-agent for authentification.
     $request->setHeader('user-agent', GeneralUtility::getIndpEnv('HTTP_USER_AGENT'));
     // Set basic authentication.
     if ($this->extensionConfiguration->use('basicAuthentication')) {
         $basicAuthentication = GeneralUtility::trimExplode(':', $this->extensionConfiguration->get('basicAuthentication'), true);
         $request->setAuth($basicAuthentication[0], $basicAuthentication[1]);
     }
     return $request;
 }
<?php

if (!defined('TYPO3_MODE')) {
    die('Access denied.');
}
\R3H6\Error404page\Utility\CustomPageUtility::addDoktypeToPagesLanguageOverlay(\R3H6\Error404page\Configuration\ExtensionConfiguration::EXT_KEY, \R3H6\Error404page\Configuration\ExtensionConfiguration::get('doktypeError404page'), 'Error404page', '404');
<?php

if (!defined('TYPO3_MODE')) {
    die('Access denied.');
}
\R3H6\Error404page\Utility\CustomPageUtility::addDoktype($_EXTKEY, \R3H6\Error404page\Configuration\ExtensionConfiguration::get('doktypeError404page'), 'Error404page');
if (TYPO3_MODE === 'BE' && \R3H6\Error404page\Configuration\ExtensionConfiguration::get('enableErrorLog')) {
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptSetup('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:error404page/Configuration/TypoScript/setup.txt">');
    if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '7.6.0', '<')) {
        \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptSetup('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:error404page/Configuration/TypoScript/Compatibility6/setup.txt">');
    }
    /**
     * Registers a Backend Module
     */
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule('R3H6.' . $_EXTKEY, 'web', 'statistic', '', array('Error' => 'dashboard, list, show, deleteAll'), array('access' => 'user,group', 'icon' => 'EXT:' . $_EXTKEY . '/ext_icon.svg', 'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_statistic.xlf'));
}
if (version_compare(\TYPO3\CMS\Core\Utility\VersionNumberUtility::getCurrentTypo3Version(), '7.4.0', '>=')) {
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile($_EXTKEY, 'Configuration/PageTS/Redirect403.txt', 'EXT:error404page :: Redirect 403 error to login page');
}
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addLLrefForTCAdescr('tx_error404page_domain_model_error', 'EXT:error404page/Resources/Private/Language/locallang_csh_tx_error404page_domain_model_error.xlf');