@@ -103,17 +103,31 @@ checkPieces :: StaticSettings
103103checkPieces _ pieces _ | any (T.null . fromPiece) $ safeInit pieces =
104104 return $ Redirect (filterButLast (not . T.null . fromPiece) pieces) Nothing
105105
106−checkPieces ss@StaticSettings {..} pieces req =
107− lookupPieces (map (\ index -> pieces ++ [index]) ssIndices ++ [pieces])
106+checkPieces ss@StaticSettings {..} pieces req = do
107+ res <- lookupResult
108+ case res of
109+ LRNotFound -> return NotFound
110+ LRFile file -> serveFile ss req file
111+ LRFolder folder -> serveFolder ss pieces req folder
108112 where
109− lookupPieces :: [Pieces] -> IO StaticResponse
110− lookupPieces (x : xs) = do
111− res <- ssLookupFile x
112− case res of
113− LRNotFound -> lookupPieces xs
114− LRFile file -> serveFile ss req file
115− LRFolder folder -> serveFolder ss x req folder
116− lookupPieces [] = return NotFound
113+ lookupResult :: IO LookupResult
114+ lookupResult = do
115+ nonIndexResult <- ssLookupFile pieces
116+ case nonIndexResult of
117+ LRFile{} -> return nonIndexResult
118+ _ -> do
119+ indexResult <- lookupIndices (map (\ index -> pieces ++ [index]) ssIndices)
120+ return $ case indexResult of
121+ LRNotFound -> nonIndexResult
122+ _ -> indexResult
123+
124+ lookupIndices :: [Pieces] -> IO LookupResult
125+ lookupIndices (x : xs) = do
126+ res <- ssLookupFile x
127+ case res of
128+ LRNotFound -> lookupIndices xs
129+ _ -> return res
130+ lookupIndices [] = return LRNotFound
117131
118132serveFile :: StaticSettings -> W.Request -> File -> IO StaticResponse
119133serveFile StaticSettings {..} req file