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'];