예제 #1
0
파일: PageError404.php 프로젝트: Jobu/core
 /**
  * Generate an error 404 page
  *
  * @param integer $pageId
  * @param string  $strDomain
  * @param string  $strHost
  * @param boolean $blnUnusedGet
  */
 public function generate($pageId, $strDomain = null, $strHost = null, $blnUnusedGet = false)
 {
     // Add a log entry
     if ($blnUnusedGet) {
         $this->log('The request for page ID "' . $pageId . '" contained unused GET parameters: "' . implode('", "', \Input::getUnusedGet()) . '" (' . \Environment::get('base') . \Environment::get('request') . ')', __METHOD__, TL_ERROR);
     } elseif ($strDomain !== null || $strHost !== null) {
         $this->log('Page ID "' . $pageId . '" was requested via "' . $strHost . '" but can only be accessed via "' . $strDomain . '" (' . \Environment::get('base') . \Environment::get('request') . ')', __METHOD__, TL_ERROR);
     } elseif ($pageId != 'favicon.ico' && $pageId != 'robots.txt') {
         $this->log('No active page for page ID "' . $pageId . '", host "' . \Environment::get('host') . '" and languages "' . implode(', ', \Environment::get('httpAcceptLanguage')) . '" (' . \Environment::get('base') . \Environment::get('request') . ')', __METHOD__, TL_ERROR);
     }
     // Check the search index (see #3761)
     \Search::removeEntry(\Environment::get('request'));
     // Find the matching root page
     $objRootPage = $this->getRootPageFromUrl();
     // Forward if the language should be but is not set (see #4028)
     if (\Config::get('addLanguageToUrl')) {
         // Get the request string without the index.php fragment
         if (\Environment::get('request') == 'index.php') {
             $strRequest = '';
         } else {
             $strRequest = str_replace('index.php/', '', \Environment::get('request'));
         }
         // Only redirect if there is no language fragment (see #4669)
         if ($strRequest != '' && !preg_match('@^[a-z]{2}(-[A-Z]{2})?/@', $strRequest)) {
             // Handle language fragments without trailing slash (see #7666)
             if (preg_match('@^[a-z]{2}(-[A-Z]{2})?$@', $strRequest)) {
                 $this->redirect(($GLOBALS['TL_CONFIG']['rewriteURL'] ? '' : 'index.php/') . $strRequest . '/', 301);
             } else {
                 $this->redirect(($GLOBALS['TL_CONFIG']['rewriteURL'] ? '' : 'index.php/') . $objRootPage->language . '/' . $strRequest, 301);
             }
         }
     }
     // Look for a 404 page
     $obj404 = \PageModel::find404ByPid($objRootPage->id);
     // Die if there is no page at all
     if (null === $obj404) {
         header('HTTP/1.1 404 Not Found');
         die_nicely('be_no_page', 'Page not found');
     }
     // Generate the error page
     if (!$obj404->autoforward || !$obj404->jumpTo) {
         /** @var \PageModel $objPage */
         global $objPage;
         $objPage = $obj404->loadDetails();
         /** @var \PageRegular $objHandler */
         $objHandler = new $GLOBALS['TL_PTY']['regular']();
         header('HTTP/1.1 404 Not Found');
         $objHandler->generate($objPage);
         exit;
     }
     // Forward to another page
     $objNextPage = \PageModel::findPublishedById($obj404->jumpTo);
     if (null === $objNextPage) {
         header('HTTP/1.1 404 Not Found');
         $this->log('Forward page ID "' . $obj404->jumpTo . '" does not exist', __METHOD__, TL_ERROR);
         die_nicely('be_no_forward', 'Forward page not found');
     }
     $this->redirect($this->generateFrontendUrl($objNextPage->row(), null, $objRootPage->language), $obj404->redirect == 'temporary' ? 302 : 301);
 }
예제 #2
0
 /**
  * Generate an error 404 page
  * @param integer
  * @param string
  * @param string
  */
 public function generate($pageId, $strDomain = null, $strHost = null)
 {
     // Add a log entry
     if ($strDomain !== null || $strHost !== null) {
         $this->log('Page ID "' . $pageId . '" can only be accessed via domain "' . $strDomain . '" (current request via "' . $strHost . '")', 'PageError404 generate()', TL_ERROR);
     } elseif ($pageId != 'favicon.ico' && $pageId != 'robots.txt') {
         $this->log('No active page for page ID "' . $pageId . '", host "' . \Environment::get('host') . '" and languages "' . implode(', ', \Environment::get('httpAcceptLanguage')) . '" (' . \Environment::get('base') . \Environment::get('request') . ')', 'PageError404 generate()', TL_ERROR);
     }
     // Check the search index (see #3761)
     \Search::removeEntry(\Environment::get('request'));
     // Find the matching root page
     $objRootPage = $this->getRootPageFromUrl();
     // Forward if the language should be but is not set (see #4028)
     if ($GLOBALS['TL_CONFIG']['addLanguageToUrl']) {
         // Get the request string without the index.php fragment
         if (\Environment::get('request') == 'index.php') {
             $strRequest = '';
         } else {
             $strRequest = str_replace('index.php/', '', \Environment::get('request'));
         }
         // Only redirect if there is no language fragment (see #4669)
         if ($strRequest != '' && !preg_match('@^[a-z]{2}/@', $strRequest)) {
             $this->redirect($objRootPage->language . '/' . \Environment::get('request'), 301);
         }
     }
     // Look for an 404 page
     $obj404 = \PageModel::find404ByPid($objRootPage->id);
     // Die if there is no page at all
     if ($obj404 === null) {
         header('HTTP/1.1 404 Not Found');
         die('Page not found');
     }
     // Generate the error page
     if (!$obj404->autoforward || !$obj404->jumpTo) {
         global $objPage;
         $objPage = $this->getPageDetails($obj404);
         $objHandler = new $GLOBALS['TL_PTY']['regular']();
         header('HTTP/1.1 404 Not Found');
         $objHandler->generate($objPage);
         exit;
     }
     // Forward to another page
     $objNextPage = \PageModel::findPublishedById($obj404->jumpTo);
     if ($objNextPage === null) {
         header('HTTP/1.1 404 Not Found');
         $this->log('Forward page ID "' . $obj404->jumpTo . '" does not exist', 'PageError404 generate()', TL_ERROR);
         die('Forward page not found');
     }
     $this->redirect($this->generateFrontendUrl($objNextPage->row(), null, $objRootPage->language), $obj404->redirect == 'temporary' ? 302 : 301);
 }