xquery version "3.0"; declare variable $exist:path external; declare variable $exist:resource external; declare variable $exist:controller external; declare variable $exist:prefix external; declare variable $exist:root external; declare variable $local:HTTP_BAD_REQUEST := xs:integer(400); declare variable $local:HTTP_FORBIDDEN := xs:integer(403); if ($exist:path eq '') then <dispatch xmlns="http://exist.sourceforge.net/NS/exist"> <redirect url="{request:get-uri()}/"/> </dispatch> else if ($exist:path eq "/") then (: forward root path to index.xql :) <dispatch xmlns="http://exist.sourceforge.net/NS/exist"> <redirect url="index.html"/> </dispatch> else if (ends-with($exist:resource, ".html")) then (: the html page is run through view.xql to expand templates :) <dispatch xmlns="http://exist.sourceforge.net/NS/exist"> <view> <forward url="{$exist:controller}/modules/view.xql"/> </view> <error-handler> <forward url="{$exist:controller}/error-page.html" method="get"/> <forward url="{$exist:controller}/modules/view.xql"/> </error-handler> </dispatch> (: Resource paths starting with $shared are loaded from the shared-resources app :) else if (contains($exist:path, "/$shared/")) then <dispatch xmlns="http://exist.sourceforge.net/NS/exist"> <forward url="/shared-resources/{substring-after($exist:path, '/$shared/')}"> <set-header name="Cache-Control" value="max-age=3600, must-revalidate"/> </forward> </dispatch> (: Protect all _cfg folders :) else if (starts-with($exist:path, ("/_", "/%5F"))) then ( response:set-status-code($local:HTTP_BAD_REQUEST), <error>Bad Request</error> ) else (: everything else is passed through :) <dispatch xmlns="http://exist.sourceforge.net/NS/exist"> <cache-control cache="yes"/> </dispatch>