diff --git a/typo3/sysext/core/Classes/TypoScript/IncludeTree/TreeFromLineStreamBuilder.php b/typo3/sysext/core/Classes/TypoScript/IncludeTree/TreeFromLineStreamBuilder.php
index 9b2f26ecd5ed769f02a9ed1151bc4bcedbc18fc8..d6e9d2a05e9c81626fd7706850055580d83da5c8 100644
--- a/typo3/sysext/core/Classes/TypoScript/IncludeTree/TreeFromLineStreamBuilder.php
+++ b/typo3/sysext/core/Classes/TypoScript/IncludeTree/TreeFromLineStreamBuilder.php
@@ -95,7 +95,7 @@ final class TreeFromLineStreamBuilder
      * a given source stream of lines exactly once, but creates a two-level
      * include node structure from it:
      *
-     * For instance, when a condition is encountered, it created a node for the
+     * For instance, when a condition is encountered, it creates a node for the
      * condition, and the "body" lines of the condition are child nodes of the
      * condition node. The $previousNode <-> $node juggling handles this: When
      * the condition body ends (new condition, or [end] or similar), the
@@ -296,11 +296,16 @@ final class TreeFromLineStreamBuilder
         } elseif (str_contains($absoluteFileName, '*')) {
             // Something with * in file part
             $directory = rtrim(dirname($absoluteFileName) . '/');
-            if (!is_dir($directory) && str_starts_with($atImportValue, './') && !$tryRelative) {
+            $directoryExists = is_dir($directory);
+            if (!$directoryExists && str_starts_with($atImportValue, './') && !$tryRelative) {
                 // See if we can import some relative wildcard like "./Setup/*" or "./Setup/*.typoscript"
                 $this->processAtImport($fileSuffix, $node, $atImportValueToken, $atImportLine, true);
                 return;
             }
+            if (!$directoryExists) {
+                // Absolute directory. There is nothing to import if the directory does not exist.
+                return;
+            }
             $filePattern = basename($absoluteFileName);
             if (!str_contains($filePattern, '*')) {
                 return;
diff --git a/typo3/sysext/core/Tests/Functional/TypoScript/IncludeTree/TreeFromLineStreamBuilderTest.php b/typo3/sysext/core/Tests/Functional/TypoScript/IncludeTree/TreeFromLineStreamBuilderTest.php
index 3cbe4725dde04e377ad99debf5351e391d281a4a..67efb1fbb2ce10d84f03541bf7414b679e9ab237 100644
--- a/typo3/sysext/core/Tests/Functional/TypoScript/IncludeTree/TreeFromLineStreamBuilderTest.php
+++ b/typo3/sysext/core/Tests/Functional/TypoScript/IncludeTree/TreeFromLineStreamBuilderTest.php
@@ -465,6 +465,16 @@ class TreeFromLineStreamBuilderTest extends FunctionalTestCase
             $expectedTree,
         ];
 
+        $atImportStatement = '@import "EXT:core/Tests/Functional/TypoScript/IncludeTree/Fixtures/AtImport/NotExistingDirectory/*.typoscript"';
+        $atImportLineStream = (new LosslessTokenizer())->tokenize($atImportStatement);
+        $expectedTree = new FileInclude();
+        $expectedTree->setLineStream($atImportLineStream);
+        $expectedTree->setSplit();
+        yield 'atImport with *.typoscript on not existing directory does not crash' => [
+            $atImportLineStream,
+            $expectedTree,
+        ];
+
         $atImportStatement = '@import "EXT:core/Tests/Functional/TypoScript/IncludeTree/Fixtures/AtImport/AbsoluteImport/Scenario1/*.typoscript"';
         $atImportLineStream = (new LosslessTokenizer())->tokenize($atImportStatement);
         $atImportLine = iterator_to_array($atImportLineStream->getNextLine())[0];