Redirecting to a Different Location
Problem
You need to tell the client’s browser to look elsewhere for a page.
Solution
Instead of a normal header, just issue a location redirect and exit. Don’t forget the extra newline at the end of the header.
$url = "http://www.perl.com/CPAN/"; print "Location: $url\n\n"; exit;
Discussion
Sometimes your CGI program doesn’t need to generate the
document on its own. It only needs to tell the client at the other
end to fetch a different document instead. In that case, the HTTP
header needs to include this directive as a
Location
line followed by the URL you want to send
them to. Make sure to use an absolute URL, not a relative one.
The direct and literal solution given above is usually sufficient.
But if you already have the CGI module loaded, use the
redirect
function. You might use this code if you are building and setting a
cookie, as shown in Example 19.4.
Example 19-4. oreobounce
#!/usr/bin/perl -w # oreobounce - set a cookie and redirect the browser use CGI qw(:cgi); $oreo = cookie( -NAME => 'filling', -VALUE => "vanilla crème", -EXPIRES => '+3M', # M for month, m for minute -DOMAIN => '.perl.com'); $whither = "http://somewhere.perl.com/nonesuch.html"; print redirect( -URL => $whither, -COOKIE => $oreo);
That would produce:
Status: 302 Moved Temporarily
Set-Cookie: filling=vanilla%20cr%E4me; domain=.perl.com;
expires=Tue, 21-Jul-1998 11:58:55 GMT
Date: Tue, 21 Apr 1998 11:55:55 GMT
Location: http://somewhere.perl.com/nonesuch.html
Content-Type: ...
Get Perl Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.