diff --git a/mighttpd2.cabal b/mighttpd2.cabal
--- a/mighttpd2.cabal
+++ b/mighttpd2.cabal
@@ -1,5 +1,5 @@
 Name:                   mighttpd2
-Version:                3.0.1
+Version:                3.0.3
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
@@ -79,7 +79,7 @@
                       , unix
                       , wai >= 2.0
                       , wai-app-file-cgi >= 2.0
-                      , wai-logger >= 2.0
+                      , wai-logger >= 2.1
                       , warp >= 2.0
   if flag(tls)
     Build-Depends:      tls
diff --git a/src/WaiApp.hs b/src/WaiApp.hs
--- a/src/WaiApp.hs
+++ b/src/WaiApp.hs
@@ -5,7 +5,7 @@
 import Control.Monad.IO.Class (liftIO)
 import Data.ByteString (ByteString)
 import qualified Data.ByteString.Char8 as BS (isPrefixOf, length)
-import Network.HTTP.Types (preconditionFailed412, movedPermanently301)
+import Network.HTTP.Types (preconditionFailed412, movedPermanently301, urlDecode)
 import Network.Wai (Application, responseLBS)
 import Network.Wai.Internal
 import Network.Wai.Application.Classic
@@ -19,29 +19,31 @@
 fileCgiApp cspec filespec cgispec revproxyspec um req = case mmp of
     Fail -> do
         let st = preconditionFailed412
-        liftIO $ logger cspec req st Nothing
+        liftIO $ logger cspec req' st Nothing
         fastResponse st defaultHeader "Precondition Failed\r\n"
     Redirect -> do
         let st = movedPermanently301
-            hdr = defaultHeader ++ redirectHeader req
+            hdr = defaultHeader ++ redirectHeader req'
         liftIO $ logger cspec req st Nothing
         fastResponse st hdr "Moved Permanently\r\n"
     Found (RouteFile  src dst) ->
-        fileApp cspec filespec (FileRoute src dst) req
+        fileApp cspec filespec (FileRoute src dst) req'
     Found (RouteRedirect src dst) ->
-        redirectApp cspec (RedirectRoute src dst) req
+        redirectApp cspec (RedirectRoute src dst) req'
     Found (RouteCGI   src dst) ->
-        cgiApp cspec cgispec (CgiRoute src dst) req
+        cgiApp cspec cgispec (CgiRoute src dst) req'
     Found (RouteRevProxy src dst dom prt) ->
         revProxyApp cspec revproxyspec (RevProxyRoute src dst dom prt) req
   where
     (host, _) = hostPort req
+    path = urlDecode False $ rawPathInfo req
     mmp = case getBlock host um of
         Nothing  -> Fail
-        Just blk -> getRoute (rawPathInfo req) blk
+        Just blk -> getRoute path blk
     fastResponse st hdr body = return $ responseLBS st hdr body
     defaultHeader = [("Content-Type", "text/plain")
                     ,("Server", softwareName cspec)]
+    req' = req { rawPathInfo = path } -- FIXME
 
 getBlock :: ByteString -> RouteDB -> Maybe [Route]
 getBlock _ [] = Nothing
