Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

58 lines (44 sloc) 1.863 kB
-module(yaws_vdir).
-export([arg_rewrite/1]).
-include_lib("../include/yaws_api.hrl").
-export([join/2]).
join(List, Sep) ->
lists:foldl(fun(A, "") -> A; (A, Acc) -> Acc ++ Sep ++ A
end, "", List).
arg_rewrite(ARG) ->
Req = ARG#arg.req,
%%io:fwrite("----->rewrite_mod for request: ~p\n",[ARG#arg.req]),
case Req#http_request.path of
{abs_path, RawPath} ->
case (catch yaws_api:url_decode_q_split(RawPath)) of
{'EXIT', _} ->
%%broken request - ignore let yaws_server handle it.
ARG2 = ARG;
{"", _QueryPart} ->
ARG2 = ARG;
{"/", _QueryPart} ->
%%don't allow vdir to be specified for root -
%% it doesn't make sense
ARG2 = ARG;
{DecPath, _QueryPart} ->
SC = get(sc),
%%vdirpath/3 will return the longest(ie most specific)
%% 'virtual directory' match for our request
%%It retrieves the vdir definitions from #arg.opaque
case yaws_server:vdirpath(SC, ARG, DecPath) of
{"",_MainDocRoot} ->
%%no virtual dir corresponding to this
%% http_request.path
ARG2 = ARG;
{Virt,DocRoot} ->
%%the virtual-path of our request matches a
%% vdir specification
%% - rewrite ARG accordingly.
ARG2 = ARG#arg{docroot = DocRoot,
docroot_mount = Virt}
end
end;
_Else ->
ARG2 = ARG
end,
ARG2.
Jump to Line
Something went wrong with that request. Please try again.