diff --git a/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php b/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php
index 97e9417065207666a32ecc25a96952380168e07a..e682cddbbc0216e52782b6a243c61918037636af 100644
--- a/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php
+++ b/typo3/sysext/install/Classes/FolderStructure/DefaultFactory.php
@@ -98,33 +98,6 @@ class DefaultFactory
                             ],
                         ],
                     ],
-                    [
-                        'name' => 'typo3conf',
-                        'type' => DirectoryNode::class,
-                        'targetPermission' => $directoryPermission,
-                        'children' => [
-                            [
-                                'name' => 'ext',
-                                'type' => DirectoryNode::class,
-                                'targetPermission' => $directoryPermission,
-                            ],
-                            [
-                                'name' => 'l10n',
-                                'type' => DirectoryNode::class,
-                                'targetPermission' => $directoryPermission,
-                            ],
-                            [
-                                'name' => 'sites',
-                                'type' => DirectoryNode::class,
-                                'targetPermission' => $directoryPermission,
-                            ],
-                            [
-                                'name' => 'system',
-                                'type' => DirectoryNode::class,
-                                'targetPermission' => $directoryPermission,
-                            ],
-                        ],
-                    ],
                     $this->getFileadminStructure(),
                 ],
             ];
@@ -145,6 +118,36 @@ class DefaultFactory
                     'targetContentFile' => self::TEMPLATE_PATH . '/root-web-config',
                 ];
             }
+
+            if (!Environment::isComposerMode()) {
+                $structure['children'][] = [
+                    'name' => 'typo3conf',
+                    'type' => DirectoryNode::class,
+                    'targetPermission' => $directoryPermission,
+                    'children' => [
+                        [
+                            'name' => 'ext',
+                            'type' => DirectoryNode::class,
+                            'targetPermission' => $directoryPermission,
+                        ],
+                        [
+                            'name' => 'l10n',
+                            'type' => DirectoryNode::class,
+                            'targetPermission' => $directoryPermission,
+                        ],
+                        [
+                            'name' => 'sites',
+                            'type' => DirectoryNode::class,
+                            'targetPermission' => $directoryPermission,
+                        ],
+                        [
+                            'name' => 'system',
+                            'type' => DirectoryNode::class,
+                            'targetPermission' => $directoryPermission,
+                        ],
+                    ],
+                ];
+            }
         } else {
             // This is when the public path is a subfolder (e.g. public/ or web/)
             $publicPath = substr(Environment::getPublicPath(), strlen(Environment::getProjectPath()) + 1);
@@ -164,11 +167,6 @@ class DefaultFactory
                         $this->getTemporaryAssetsFolderStructure(),
                     ],
                 ],
-                [
-                    'name' => 'typo3conf',
-                    'type' => DirectoryNode::class,
-                    'targetPermission' => $directoryPermission,
-                ],
                 $this->getFileadminStructure(),
             ];
 
@@ -189,6 +187,14 @@ class DefaultFactory
                 ];
             }
 
+            if (!Environment::isComposerMode()) {
+                $publicPathSubStructure[] = [
+                    'name' => 'typo3conf',
+                    'type' => DirectoryNode::class,
+                    'targetPermission' => $directoryPermission,
+                ];
+            }
+
             $structure = [
                 // Note that root node has no trailing slash like all others
                 'name' => Environment::getProjectPath(),
diff --git a/typo3/sysext/install/Classes/Report/InstallStatusReport.php b/typo3/sysext/install/Classes/Report/InstallStatusReport.php
index c44c3c263269a6eed1ac1873b3f195929d2dc2c9..94117ce5ca2074bc735db6f0ac88b14c9a617762 100644
--- a/typo3/sysext/install/Classes/Report/InstallStatusReport.php
+++ b/typo3/sysext/install/Classes/Report/InstallStatusReport.php
@@ -91,7 +91,6 @@ final class InstallStatusReport implements StatusProviderInterface
             $varPath . '/transient/' => 2,
             $varPath . '/charset/' => 2,
             $varPath . '/lock/' => 2,
-            $sitePath . '/typo3conf/' => 2,
             Environment::getLabelsPath() => 0,
             $sitePath . '/' . $GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] => -1,
             $sitePath . '/' . $GLOBALS['TYPO3_CONF_VARS']['BE']['fileadminDir'] . '_temp_/' => 0,
@@ -100,6 +99,8 @@ final class InstallStatusReport implements StatusProviderInterface
         // Check for writable extension folder files in non-composer mode only
         if (!Environment::isComposerMode()) {
             $checkWritable[Environment::getExtensionsPath()] = 0;
+            $checkWritable[$sitePath . '/typo3conf/'] = 2;
+
         }
 
         foreach ($checkWritable as $path => $requirementLevel) {