Moin Moin !
Mit einem Script für die 404-Meldung; vorausgesetzt, Du kannst den geforderten Bildtyp anhand der URL erkennen.
Folgendes Script ist meine 404-Meldung auf meinem Intranet-Server (beide schon etwas angestaubt):
---8<---8<---8<---
#!/usr/bin/perl -w
use strict;
use CGI qw(:all);
use Socket;
sub status
{
my $stat=shift;
my $stat2=$stat;
$stat2=~s/^\d+\s+//;
return +(
header(-status=>$stat),"\n",
start_html($stat2),"\n",
h1($stat2),"\n"
);
}
sub sign
{
if (defined $ENV{'SERVER_SIGNATURE'}) {
return +(
hr(),"\n",
$ENV{'SERVER_SIGNATURE'},"\n",
end_html(),"\n"
);
} else {
return +(end_html(),"\n");
}
}
unless (defined $ENV{'REDIRECT_URL'}) {
# we were not called by Apache's ErrorDocument directive
print
status('403 Forbidden'),
p('This script is for internal purposes only.'),
sign();
exit(0);
}
my $url=$ENV{'REDIRECT_URL'};
if ($url=~/.js$/i) {
# Missing Javascript
my $msg=qq[
404 Not Found
$url
is missing.
This is a server-generated replacement that only shows you this message.
Expect trouble with your webpage ...
];
$msg=~s/\n/\n/gs;
$msg=~s/^\s+//gm;
print
header(
-expires=>'-1d',
-type=>'text/javascript',
),
qq[
/* 404 Not Found */
/* The real javascript file "$url" is missing. */
window.alert('$msg');
];
exit(0);
}
if ($url=~/.css$/i) {
# Missing Javascript
print
header(
-expires=>'-1d',
-type=>'text/css',
),
"/* 404 Not Found */\n",
"/* The real stylesheet file "$url" is missing. */\n";
exit(0);
}
if (($url=~/.gif$/i) or ($url=~/.jpe?g?$/i) or ($url=~/.png$/i)) {
# Missing Image
print
header(
-expires=>'-1d',
-type=>'image/gif',
),
"\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00" .
"\xFF\xFF\xFF\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00" .
"\x01\x00\x01\x00\x00\x02\x01\x44\x00\x3B";
# Data is a 2-color 1x1 Pixel transparent GIF image
exit(0);
}
standard broken link
print
status('404 Not Found'),
p("The requested URL $url was not found on this server."),
sign();
exit(0);
---8<---8<---8<---
Es geht sicher auch anders, vielleicht mit Rewrite-Rules. Mein Script funktioniert auf meinem Linux jedenfalls.
Auf Windows sollte noch möglichst früh "binmode STDOUT;" eingefügt werden, weil sonst das Ersatz-Gif beschädigt werden könnte. Unter Linux ist das unnötig, schadet aber auch nicht.
Alexander
Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"