[ic] Interchange::Link, missing.html, 404
Kevin Walsh
kevin at cursor.biz
Wed Jun 28 15:40:03 EDT 2006
Joshua Lavin <josh at myprivacy.ca> wrote:
> Using IC 5.4.0, Interchange::Link for mod_perl2.
>
> My special_pages/missing.html does not return a header of 404/Not
> found. Rather they return 200/OK. This is not desired.
>
> When I used Mod::Interchange, I used the 'tag' tag in missing.html:
>
> [tag op=header]
> Status: 404 Not found
> Content-type: text/html; charset=ISO-8859-1
> [/tag]
>
> This no longer works with IC:Link (gives a blank page). Also reported
> here:
> http://www.icdevgroup.org/pipermail/interchange-users/2006-March/
> 045144.html
>
> I believe the problem stems from this code in Link.pm:
>
> elsif($set_status =~ /^404/) {
> #warn "404 not found status\n";
> close (SOCK) or die "close: $!\n";
> return Apache2::Const::OK;
> }
>
> Is there any reason why this could not return
> Apache2::Const::NOT_FOUND? Would that not allow us to use a
> missing.html? (Could I use an ErrorDocument then, delivered by IC?)
>
> Anyone else having this problem?
>
My "missing" pages use the [tag] code you posted above. I use
mod_interchange everywhere and that works fine. In fact, I was
going to commit that [tag] code to the Standard demo. I won't do
that now.
I don't have an Interchange::Link setup to play with but, looking
at the code, it seems that you might be able to get away with the
following (completely untried and untested) patch:
----------------------------------------------------------------------
--- ./dist/src/mod_perl2/Interchange/Link.pm 28 Jun 2006 14:39:41 -0000 1.10
+++ ./dist/src/mod_perl2/Interchange/Link.pm 28 Jun 2006 19:28:26 -0000
@@ -743,11 +743,6 @@
close (SOCK) or die "close: $!\n";
return Apache2::Const::REDIRECT;
}
- elsif($set_status =~ /^404/) {
-#warn "404 not found status\n";
- close (SOCK) or die "close: $!\n";
- return Apache2::Const::OK;
- }
elsif($set_status eq 'httpd_deliver') {
$deliver_object = $set_status;
}
@@ -792,6 +787,11 @@
}
close (SOCK) or die "close: $!\n";
print @out;
+
+ if ($set_status =~ /^404/) {
+#warn "Returning NOT_FOUND\n";
+ return Apache2::Const::NOT_FOUND;
+ }
}
#warn "Returning OK\n";
----------------------------------------------------------------------
I'm not sure whether the NOT_FOUND return code is necessary. It's
probably not; OK is probably sufficient. If the NOT_FOUND proves to
be incorrect then just remove the "-" lines and forget the "+" lines,
otherwise apply the whole patch and see what it does.
If you need me, you'll find me in the nuclear fallout shelter. :-)
--
_/ _/ _/_/_/_/ _/ _/ _/_/_/ _/ _/
_/_/_/ _/_/ _/ _/ _/ _/_/ _/ K e v i n W a l s h
_/ _/ _/ _/ _/ _/ _/ _/_/ kevin at cursor.biz
_/ _/ _/_/_/_/ _/ _/_/_/ _/ _/
More information about the interchange-users
mailing list