-
Notifications
You must be signed in to change notification settings - Fork 272
Rewrite module
klacke edited this page Sep 13, 2010
·
1 revision
arg_rewrite_mod = rewriter
between the virtual server definition in the yaws.conf file.
For example:
<server localhost> port = 8080 listen = 0.0.0.0 docroot = /var/www/yaws-default arg_rewrite_mod = rewriter </server>
Below is an example/template of how I managed to get something working. I’m not sure if this is the ‘right’ way to do it however.. Feel free to comment & improve/replace it.
……
-module(rewriter).
-export([arg_rewrite/1]).
-include_lib("yaws/include/yaws_api.hrl").
arg_rewrite(ARG) ->
Req = 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;
{DecPath, QueryPart} ->
Parts = string:tokens(DecPath,"/"),
case lists:member("viewvc",Parts) of
true ->
%%
%Do something with DecPath & QueryPart
%
case QueryPart of
[] ->
%% Rewritten = SomeNewpath;
_Other ->
%% Rewritten = SomeNewpath ++ "?" ++ QueryPart
end,
%
%%
Req2 = Req#http_request{path = {abs_path, Rewritten}},
ARG2 = ARG#arg{req = Req2};
false ->
ARG2 = ARG
end
end;
_Else ->
ARG2 = ARG
end,
ARG2.
……
Great job! I improved the code to make Yaws work with PHP Zend Framework. Go to http://forum.trapexit.org/viewtopic.php?t=14964 for more information. It is quite possible that it will also work for other frameworks (like Cake, for example) – though I haven’t tested it personally.