diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,7 @@
+## 3.0.23.0
+
+* Add rewriteRoot middleware [#697](https://github.com/yesodweb/wai/pull/697).
+
 ## 3.0.22.1
 
 * Drop dependency on blaze-builder, requiring streaming-commons >= 0.2
diff --git a/Network/Wai/Middleware/Rewrite.hs b/Network/Wai/Middleware/Rewrite.hs
--- a/Network/Wai/Middleware/Rewrite.hs
+++ b/Network/Wai/Middleware/Rewrite.hs
@@ -27,6 +27,7 @@
       -- ** Recommended functions
     , rewriteWithQueries
     , rewritePureWithQueries
+    , rewriteRoot
 
       -- ** Deprecated
     , rewrite
@@ -262,6 +263,21 @@
 rewritePureWithQueries :: (PathsAndQueries -> H.RequestHeaders -> PathsAndQueries)
                        -> Middleware
 rewritePureWithQueries convert app req = app $ rewriteRequestPure convert req
+
+-- | Rewrite root requests (/) to a specified path
+--
+-- Note that /index.html/ in example below should already be a valid route.
+--
+-- @
+--     rewriteRoot "index.html" :: Middleware
+-- @
+--
+-- @since 3.0.23.0
+rewriteRoot :: Text -> Middleware
+rewriteRoot root = rewritePureWithQueries onlyRoot
+  where
+    onlyRoot ([], q) _ = ([root], q)
+    onlyRoot paths _ = paths
 
 --------------------------------------------------
 -- * Modifying 'Request's directly
diff --git a/wai-extra.cabal b/wai-extra.cabal
--- a/wai-extra.cabal
+++ b/wai-extra.cabal
@@ -1,5 +1,5 @@
 Name:                wai-extra
-Version:             3.0.22.1
+Version:             3.0.23.0
 Synopsis:            Provides some basic WAI handlers and middleware.
 description:
   Provides basic WAI handler and middleware functionality:
