diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 3.1.4
+
+* Reinstate redirectToIndex
+
 ## 3.1.3
 
 * Add 404 handler [#467](https://github.com/yesodweb/wai/pull/467)
diff --git a/Network/Wai/Application/Static.hs b/Network/Wai/Application/Static.hs
--- a/Network/Wai/Application/Static.hs
+++ b/Network/Wai/Application/Static.hs
@@ -40,6 +40,7 @@
 
 import Data.Text (Text)
 import qualified Data.Text as T
+import qualified Data.Text.Encoding as TE
 
 import Network.HTTP.Date (parseHTTPDate, epochTimeToHTTPDate, formatHTTPDate)
 
@@ -107,20 +108,37 @@
 checkPieces ss@StaticSettings {..} pieces req = do
     res <- lookupResult
     case res of
-        LRNotFound -> return NotFound
-        LRFile file -> serveFile ss req file
-        LRFolder folder -> serveFolder ss pieces req folder
+        Left location -> return $ RawRedirect $ TE.encodeUtf8 location
+        Right LRNotFound -> return NotFound
+        Right (LRFile file) -> serveFile ss req file
+        Right (LRFolder folder) -> serveFolder ss pieces req folder
   where
-    lookupResult :: IO LookupResult
+    lookupResult :: IO (Either Text LookupResult)
     lookupResult = do
       nonIndexResult <- ssLookupFile pieces
       case nonIndexResult of
-          LRFile{} -> return nonIndexResult
+          LRFile{} -> return $ Right nonIndexResult
           _ -> do
               indexResult <- lookupIndices (map (\ index -> pieces ++ [index]) ssIndices)
               return $ case indexResult of
-                  LRNotFound -> nonIndexResult
-                  _ -> indexResult
+                  LRNotFound -> Right nonIndexResult
+                  LRFile file | ssRedirectToIndex ->
+                      let relPath =
+                              case reverse pieces of
+                                  -- Served at root
+                                  [] -> fromPiece $ fileName file
+                                  lastSegment:_ ->
+                                      case fromPiece lastSegment of
+                                          -- Ends with a trailing slash
+                                          "" -> fromPiece $ fileName file
+                                          -- Lacks a trailing slash
+                                          lastSegment' -> T.concat
+                                              [ lastSegment'
+                                              , "/"
+                                              , fromPiece $ fileName file
+                                              ]
+                       in Left relPath
+                  _ -> Right indexResult
 
     lookupIndices :: [Pieces] -> IO LookupResult
     lookupIndices (x : xs) = do
diff --git a/wai-app-static.cabal b/wai-app-static.cabal
--- a/wai-app-static.cabal
+++ b/wai-app-static.cabal
@@ -1,5 +1,5 @@
 name:            wai-app-static
-version:         3.1.3
+version:         3.1.4
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
