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: ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access