Geoffrey Young wrote: > > Rasoul Hajikhani wrote: > > > Folks, > > The apache::Request docs indicate that param can be used to set the > > query string. However, > > it fails when I do something like this: > > > > my $r = Apache::Request->new(shift); > > ... > > my $host = $r->hostname; > > my $uri = $r->uri; > > my $params = $r->parsed_uri->query; > > # does not seem to work!? > > my $scheme = $r->parsed_uri->scheme || 'https'; > > $r->param('previous_uri' => "$scheme://$host$uri"); > > $r->param('q_string' => $params) if ($params); > > $r->header_out(Location => "http://$host/login"); > > $r->status(REDIRECT); > > $r->send_http_header; > > return OK; > > > > Can someone tell me why this is failing? I can not get previous_uri or > > q_string in my login module. > > the way you are thinking about it is fundamentally wrong - $r is the > _current_ request object, so setting $r->param sets query string > arguments for the current request only. > > you need to look into the Apache::URI module, which can be used to > create unless ($c->{userId} && $c->{user}) { my $p_uri = $r->parsed_uri; my $string = "previous_uri=" . $r->uri . ($r->args() ? "?" . $r->args() : undef); $p_uri->query($string); return FORBIDDEN; } This still fails to resolve the problem. Unless ofcourse I am not using the right method.
-r properly formed URI strings. > > > > > Also, $r->parsed_uri->scheme does not return anything back. > > it won't - to create a self-referential URI use Apache::URI->parse($r) > > HTH > > --Geoff