package sihl

  1. Overview
  2. Docs

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"
      |> CCOpt.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 (* don't drop root *)
           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
;;
OCaml

Innovation. Community. Security.