Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP


defaultIndexGenerator - wrong directory links #121

rmoorman opened this Issue · 2 comments

2 participants

Rico Moorman Doug Beardsley
Rico Moorman


Some time ago I spotted an issue within the directory serving functionality of snap while using hakyll. I actually had a directory structure generated (and served by snap) which was several levels deep.
Snap provided me with the fancy directory index but then I noticed that the links to subdirectories were wrong. The links had a double slash at the end.

I decided to investigate a little more what was going on and tried if I could reproduce this with a default snap installation. Using the snap api tutorial I could reproduce this behaviour.
I made the default routes look like this:

routes :: [(ByteString, Handler App App ())]
routes = [ ("/",            index)
         , ("/echo/:stuff", echo)
         , ("", with heist heistServe)
         , ("", serveDirectory "resources/static")
         , ("r", serveDirectoryWith fancyDirectoryConfig "./")

Running the application and visiting (in my case) http://localhost:8000/r/ generated the same double slashes.

The following patch resulted in correct links for me.

From f4617e823b36ec4164611729a8a885b7165f3f5e Mon Sep 17 00:00:00 2001
From: R. Moorman <>
Date: Fri, 10 Feb 2012 19:50:46 +0100
Subject: [PATCH] Adjusted directory link href to contain only one forward slash.

 src/Snap/Util/FileServe.hs |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/src/Snap/Util/FileServe.hs b/src/Snap/Util/FileServe.hs
index 134f651..e92c263 100644
--- a/src/Snap/Util/FileServe.hs
+++ b/src/Snap/Util/FileServe.hs
@@ -324,7 +324,7 @@ defaultIndexGenerator mm styles d = do
         f <- liftIO $ liftM (\s -> T.encodeUtf8 s `mappend` "/") $ packFn f0
         writeBS "<tr><td class='filename'><a href='"
         writeBS f
-        writeBS "/'>"
+        writeBS "'>"
         writeBS f
         writeBS "</a></td><td class='type' colspan=2>DIR</td></tr>"


I hope this helps and thank you very much in advance.

Keep up the great work.

Doug Beardsley

Can you retry your code without the patch on snap-core but with "." instead of "./" in the call to serveDirectoryWith?

Rico Moorman

This yields the same result. I think the issue is that the HTML within the function appends a slash to a string which already was sufficiently suffixed with a slash using mappend "/" in one of the lines above.

Doug Beardsley mightybyte closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.