Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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.