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.