[FEATURE] Add option to build correct URLs when fetching 404 page
authorChristian Futterlieb <christian@futterlieb.ch>
Mon, 23 Jun 2014 15:43:01 +0000 (17:43 +0200)
committerChristian Futterlieb <christian@futterlieb.ch>
Mon, 23 Jun 2014 15:43:01 +0000 (17:43 +0200)
Resolves: #59815

Classes/Controller/PagenotfoundController.php
Documentation/Configuration/ExtensionManager/Index.rst
ext_conf_template.txt
locallang_db.xml

index bec0cec..4efe495 100644 (file)
@@ -158,6 +158,15 @@ class Tx_Pagenotfoundhandling_Controller_PagenotfoundController
      */
     protected $_additionalHeaders = array();
 
+    /**
+     * Absolute reference prefix
+     *
+     * Prefixes the URL which fetches the 404 page
+     *
+     * @var string
+     */
+    protected $_absoluteReferencePrefix = '';
+
        /**
         * Main method called through tslib_fe::pageErrorHandler()
         *
@@ -380,6 +389,18 @@ class Tx_Pagenotfoundhandling_Controller_PagenotfoundController
         if(isset($conf['additionalHeaders'])) {
             $this->_additionalHeaders = \t3lib_div::trimExplode('|', $conf['additionalHeaders'], true);
         }
+
+        if(isset($conf['absoluteReferencePrefix'])) {
+            // remove '/' and whitespaces
+            $absoluteReferencePrefix = \trim(\trim($conf['absoluteReferencePrefix'], '/'));
+
+            // check for double dots (..) in the path
+            if (\preg_match('/([\.]|\%2e){2}/i', $absoluteReferencePrefix)) {
+                throw new \InvalidArgumentException('EXT:pagenotfoundhandling: absoluteReferencePrefix must not contain double dots', 1403536458);
+            }
+
+            $this->_absoluteReferencePrefix = $absoluteReferencePrefix;
+        }
     }
 
     /**
@@ -398,7 +419,12 @@ class Tx_Pagenotfoundhandling_Controller_PagenotfoundController
                        $pageRow = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('*', 'pages', $where);
                        if(count($pageRow) === 1) {
                                $pageRow = current($pageRow);
-                               $url = t3lib_div::locationHeaderUrl('/');
+                               $url = \t3lib_div::getIndpEnv('TYPO3_REQUEST_HOST') . '/';
+
+                               if ($this->_absoluteReferencePrefix) {
+                                   $url .= $this->_absoluteReferencePrefix . '/';
+                               }
+
                                $url .= 'index.php?id=' . $this->_default404Page . '&loopPrevention=1';
 
                                if(!empty($this->_forceLanguage)) {
index f59adef..8c256ff 100644 (file)
@@ -256,6 +256,21 @@ on the extension name to open the configuration interface.
    Default
          -
 
+.. container:: table-row
+
+   Property
+         absoluteReferencePrefix
+   
+   Data type
+         string
+   
+   Description
+         If your TYPO3 installation runs in a subdir of the DOCUMENT_ROOT,
+         add the relative path from DOCUMENT_ROOT to the installation here
+   
+   Default
+         -
+
 
 .. ###### END~OF~TABLE ######
 
index 13f8d11..d36e0a0 100644 (file)
@@ -19,6 +19,9 @@ additional403GetParams =
 # cat=basic/enable; type=options[Default (Do not send special headers)=0, HTTP/1.1 400 Bad Request=1, HTTP/1.1 401 Unauthorized=2, HTTP/1.1 402 Payment Required=3, HTTP/1.1 403 Forbidden=4]; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.default403Header
 default403Header = 4
 
+# cat=basic/enable; type=string; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.absoluteReferencePrefix
+absoluteReferencePrefix = 
+
 # cat=basic/enable; type=boolean; label=LLL:EXT:pagenotfoundhandling/locallang_db.xml:pagenotfoundhandling.constants.disableDomainConfig
 disableDomainConfig = 0
 
index 75de4cb..ff57d2b 100644 (file)
@@ -35,6 +35,7 @@
             <label index="pagenotfoundhandling.constants.languageParam">Language parameter: This should be the same as config.linkVars. Default: 'L'</label>
             <label index="pagenotfoundhandling.constants.passthroughContentTypeHeader">Passthrough content-type header: When a 404 page is defined, the HTTP header 'Content-Type' will be captured and sent with the 404 page. Default: '0'</label>
             <label index="pagenotfoundhandling.constants.additionalHeaders">Additional HTTP headers: Send additional HTTP headers with the 404/403 page. Separate headers with '|'. Default: ''</label>
+            <label index="pagenotfoundhandling.constants.absoluteReferencePrefix">Additional reference prefix: If your TYPO3 installation runs in a subdir of the DOCUMENT_ROOT, add the relative path from DOCUMENT_ROOT to the installation here. Default: ''</label>
         </languageKey>
         <languageKey index="de" type="array">
             <label index="pagenotfoundhandling.sys_domain.tcasheet.title">404 Behandlung</label>
@@ -66,6 +67,7 @@
             <label index="pagenotfoundhandling.constants.languageParam">Sprachparameter: Sollte dasselbe beinhalten, wie config.linkVars. Standard: 'L'</label>
             <label index="pagenotfoundhandling.constants.passthroughContentTypeHeader">Content-type header weitergeben: Wenn eine 404 Seite definiert ist, kann der HTTP header 'Content-Type' weiter an die Ausgabe gesendet werden. Standard: '0'</label>
             <label index="pagenotfoundhandling.constants.additionalHeaders">Zusätzliche HTTP header: Sendet die hier definierten HTTP headers mit der 404/403 Seite. Mehrere headers mit '|' trennen. Standard: ''</label>
+            <label index="pagenotfoundhandling.constants.absoluteReferencePrefix">Absoluter Referenz-Präfix: Falls TYPO3 nicht direkt im DOCUMENT_ROOT installiert ist, muss der relative Pfad vom DOCUMENT_ROOT zur Installation hier angegeben werden. Standard: ''</label>
         </languageKey>
     </data>
 </T3locallang>
\ No newline at end of file