# Scotty path normalizer This library provides a [Scotty] action that normalizes the HTTP request target as if it were a Unix file path. When the path normalization action detects a path that can be simplified in one of the following ways, it issues a [redirect] to a more canonical path. 1. Remove trailing slashes: `https://typeclasses.com/contravariance/` becomes `https://typeclasses.com/contravariance` 2. Remove double slashes: `https://typeclasses.com//web-servers////lesson-4` becomes `https://typeclasses.com/web-servers/lesson-4` 3. Remove `.` segments, because `.` represents "the current directory": `https://typeclasses.com/ghc/./scoped-type-variables` becomes `https://typeclasses.com/ghc/scoped-type-variables` 4. Remove segments of the form `xyz/..`, because `..` represents "the parent directory": `https://typeclasses.com/python/../javascript/monoidal-folds` becomes `https://typeclasses.com/javascript/monoidal-folds` The typical way to apply this to your Scotty server is to put `addPathNormalizer` at the top of your `ScottyM` app definition. ```haskell import qualified Web.Scotty as Scotty import Web.Scotty.PathNormalizer (addPathNormalizer) main :: IO () main = Scotty.scotty 3000 $ do addPathNormalizer Scotty.get (Scotty.capture "/:word") $ do beam <- Scotty.param (Data.Text.Lazy.pack "word") Scotty.html $ fold [ Data.Text.Lazy.pack "

Scotty, " , beam , Data.Text.Lazy.pack " me up!

" ] ``` [Scotty]: https://hackage.haskell.org/package/scotty [redirect]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302