Source file web_trailing_slash.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let middleware () =
let filter handler req =
let root_uri =
Core_configuration.read_string "PREFIX_PATH"
|> CCOption.value ~default:""
|> Format.asprintf "%s/"
|> Uri.of_string
in
let uri = req.Opium.Request.target |> Uri.of_string in
let uri =
uri
|> Uri.path
|> (fun path ->
if Uri.equal root_uri uri
then path
else path |> CCString.rdrop_while (Char.equal '/'))
|> Uri.with_path uri
in
let req = Opium.Request.{ req with target = Uri.to_string uri } in
handler req
in
Rock.Middleware.create ~name:"trailing_slash" ~filter
;;