[BUGFIX] LinkService must handle old ?id=xyz links
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / LinkHandling / LegacyLinkNotationConverter.php
index 48ca6e4..b8533da 100644 (file)
@@ -82,8 +82,15 @@ class LegacyLinkNotationConverter
             $fileChar = (int)strpos($linkParameter, '/');
             $urlChar = (int)strpos($linkParameter, '.');
 
+            $isIdOrAlias = MathUtility::canBeInterpretedAsInteger($linkParameter);
+            $matches = [];
+            // capture old RTE links relative to TYPO3_mainDir
+            if (preg_match('#../\\?id=([^&]+)#', $linkParameter, $matches)) {
+                $linkParameter = $matches[1];
+                $isIdOrAlias = true;
+            }
             $containsSlash = false;
-            if (!MathUtility::canBeInterpretedAsInteger($linkParameter)) {
+            if (!$isIdOrAlias) {
                 // Detects if a file is found in site-root and if so it will be treated like a normal file.
                 list($rootFileDat) = explode('?', rawurldecode($linkParameter));
                 $containsSlash = strpos($rootFileDat, '/') !== false;
@@ -106,7 +113,7 @@ class LegacyLinkNotationConverter
             }
 
             // url (external): If doubleSlash or if a '.' comes before a '/'.
-            if ($isLocalFile !== 1 && $urlChar && (!$containsSlash || $urlChar < $fileChar)) {
+            if (!$isIdOrAlias && $isLocalFile !== 1 && $urlChar && (!$containsSlash || $urlChar < $fileChar)) {
                 $result['type'] = LinkService::TYPE_URL;
                 if (!$scheme) {
                     $result['url'] = 'http://' . $linkParameter;