diff --git a/Network/Wai/Middleware/Rewrite.hs b/Network/Wai/Middleware/Rewrite.hs
new file mode 100644
--- /dev/null
+++ b/Network/Wai/Middleware/Rewrite.hs
@@ -0,0 +1,34 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Network.Wai.Middleware.Rewrite
+    ( rewrite, autoHtmlRewrite
+    ) where
+
+import Network.Wai
+import qualified Data.ByteString.Char8 as B
+import System.Directory (doesFileExist)
+import Control.Monad.IO.Class (liftIO)
+import Web.Routes.Base (decodePathInfo)
+
+-- | rewrite based on your own conversion rules
+-- Example usage: rewrite (autoHtmlRewrite "static")
+rewrite :: (B.ByteString -> IO B.ByteString) -> Middleware
+rewrite convert app req = do
+  newPathInfo <- liftIO $ convert $ pathInfo req
+  app req { pathInfo = newPathInfo }
+
+-- | example rewriter
+--   implements 2 rules for static html re-writes
+--   1) for a directory foo/, check for foo/index.html
+--   2) for a non-directory bar, check for bar.html
+--   if the file exists, do the rewrite
+autoHtmlRewrite :: String -> B.ByteString -> IO B.ByteString
+autoHtmlRewrite staticDir pInfo = do
+    fe <- doesFileExist $ staticDir ++ "/" ++ reWritePath
+    return $ if fe then B.pack reWritePath else pInfo
+  where
+    reWritePath = concat $ map ((:) '/') reWritePieces
+    pieces = decodePathInfo $ B.unpack $ pInfo
+    reWritePieces =
+       if (null pieces) || (null $ last pieces)
+          then pieces ++  ["index.html"]
+          else (init pieces) ++ [(last pieces) ++ ".html"]
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:             0.3.2.1
+Version:             0.3.3
 Synopsis:            Provides some basic WAI handlers and middleware.
 Description:         The goal here is to provide common features without many dependencies.
 License:             BSD3
@@ -24,7 +24,8 @@
                      blaze-builder-enumerator >= 0.2 && < 0.3,
                      transformers >= 0.2 && < 0.3,
                      enumerator >= 0.4 && < 0.5,
-                     blaze-builder >= 0.2.1.3 && < 0.3
+                     blaze-builder >= 0.2.1.3 && < 0.3,
+                     web-routes >= 0.23
   Exposed-modules:   Network.Wai.Handler.CGI
                      Network.Wai.Middleware.AcceptOverride
                      Network.Wai.Middleware.Autohead
@@ -33,6 +34,7 @@
                      Network.Wai.Middleware.Gzip
                      Network.Wai.Middleware.Jsonp
                      Network.Wai.Middleware.MethodOverride
+                     Network.Wai.Middleware.Rewrite
                      Network.Wai.Middleware.Vhost
                      Network.Wai.Zlib
                      Network.Wai.Parse
