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 <email@example.com>
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
@@ -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 "/'>"
+ writeBS "'>"
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.
Can you retry your code without the patch on snap-core but with "." instead of "./" in the call to serveDirectoryWith?
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.
Apply Rico Moorman's patch fixing issue #121.