> > I learned that is too late to return a real 404 error running under CGI, > > so the page comes back with a 200 status code, which isn't quite right. > > > > More recently, I learned that with mod_perl, I learned that I can get > > the system to return a true 404, so I updated the logic to do that when > > possible: > > > > if (exists $ENV{MOD_PERL}) { > > $self->header_add( -status => 404 ); > > return ''; > > } > > else { > > return $self->error(title => 'Page not found') > > } > > > I recently ran into this myself, and discovered that setting the header_type > to 'redirect' fixed the issue: > > if (exists $ENV{MOD_PERL}) { > $self->header_add( -status => 404 ); > return $self->redirect('/'); > } > > Note I'm using the CAP::Redirect plugin, but the general principle holds. It > doesn't matter where you redirect to either, as it always trigggers the > ErrorDocument. Just don't return any content of your own. > > At least, this works for me under Apache 2.2.2 / mod_perl 2.0.3
Rhesa, With some testing, I found that this *doesn't* work for me with Apache 1.3.x and mod_perl. Instead, I get a mismatch of a 404 and a generic "redirect" page sent as HTML but declared to be text/plain. Example: 404 Not Found Connection: close Date: Wed, 07 May 2008 16:58:49 GMT Location: / Server: Apache/1.3.37 (Unix) mod_perl/1.29 Content-Type: text/plain Client-Date: Wed, 07 May 2008 16:58:49 GMT Client-Peer: 192.168.18.114:8202 Client-Response-Num: 1 Client-Transfer-Encoding: chunked <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <HTML><HEAD> <TITLE>302 Found</TITLE> </HEAD><BODY> <H1>Found</H1> The document has moved <A HREF="/">here</A>.<P> [...snip...] So I'm going to back to the hack I described recently, which seems to work for me. Mark ##### 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/ ## ## ## ################################################################