On Tue, Sep 2, 2008 at 10:49 PM, Silent <[EMAIL PROTECTED]> wrote:
> when the app run with URI like "/cgi-bin/app.cgi/news/1024"
> and I want to redirect to "/cgi-bin/app.cgi/home", (for news id 1024 may not
> found)
>
> I use $cap->redirect('../home'); # I always think this will work
>
> but I only got redirect to "/cgi-bin/app.cgi/news/home", and this
> will got a endless loop
It is doing exactly what you told it to do. You need a '../' for each
path part after
app.cgi.
> could anyone tell me a better method ? not use absolute path or
> CAP::P::Forward maybe I need to caculate the new path by $ENV{xxx}
The best method is to use an absolute path like you suggested:
# code not tested
my $home_url = $cap->query->url( -absolute => 1 ) . '/home' );
$cap->redirect( $home_url );
or if you absolutely must use a 'relative' url:
my @levels = split /\//, $cap->query->path_info;
my $home_url = $cap->query->url(-absolute => 1) . '../' x @levels . 'home';
$cap->redirect( $home_url );
I'd still go with option one (absolute url)
HTH,
Clayton
--
Clayton Scott
[EMAIL PROTECTED]
##### CGI::Application community mailing list ################
## ##
## To unsubscribe, or change your message delivery options, ##
## visit: http://www.erlbaum.net/mailman/listinfo/cgiapp ##
## ##
## Web archive: http://www.erlbaum.net/pipermail/cgiapp/ ##
## Wiki: http://cgiapp.erlbaum.net/ ##
## ##
################################################################