diff --git a/typo3/sysext/core/Classes/Core/Environment.php b/typo3/sysext/core/Classes/Core/Environment.php index 8ce8c9eb3f76dc4d13bbc1bf4b5b0f50999d8e1a..33f8975684f59e92566f3dbbe944be4cc7c0fbbc 100644 --- a/typo3/sysext/core/Classes/Core/Environment.php +++ b/typo3/sysext/core/Classes/Core/Environment.php @@ -324,6 +324,11 @@ class Environment return in_array(PHP_SAPI, self::$supportedCgiServerApis, true); } + public static function usesCgiFixPathInfo(): bool + { + return !empty(ini_get('cgi.fix_pathinfo')); + } + /** * Returns the currently configured Environment information as array. * diff --git a/typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php b/typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php index 264cddc10f5d034835cbef0f370c17ea3bb75aed..527f5bfb0d28fdb8a84c3085249d082b24161db5 100644 --- a/typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php +++ b/typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php @@ -313,8 +313,12 @@ class SystemEnvironmentBuilder */ protected static function getPathThisScriptNonCli() { + $isCgi = Environment::isRunningOnCgiServer(); + if ($isCgi && Environment::usesCgiFixPathInfo()) { + return $_SERVER['SCRIPT_FILENAME']; + } $cgiPath = $_SERVER['ORIG_PATH_TRANSLATED'] ?? $_SERVER['PATH_TRANSLATED'] ?? ''; - if ($cgiPath && Environment::isRunningOnCgiServer()) { + if ($cgiPath && $isCgi) { return $cgiPath; } return $_SERVER['ORIG_SCRIPT_FILENAME'] ?? $_SERVER['SCRIPT_FILENAME'];