Не секрет, что Apache по умолчанию не отдаёт заголовок Last-Modified для документов с SSI. Штатными средствами предлагается использовать команду XBitHack full для выдачи этого заголовка. Однако, это требует установки битов прав доступа для всех таких файлов, что зачастую не совсем удобно.
Если же вы используете Apache вместе со втроенным интерпретатором языка Perl, mod_perl, то эту проблему можно решить и без использования команды XBitHack, при помощи этого модуля:
package Apache::FLastMod;
use strict;
use Apache::Constants qw(:common);
use Apache::File ();
use Date::Manip;
sub handler {
my $r = shift;
return DECLINED unless substr($r->content_type(), 0, 9) eq 'text/html';
my $file = $r->filename;
my $modtime = (stat($file))[9];
my $lm = &UnixDate(&DateCalc("Jan 1, 1970 00:00:00 GMT", $modtime), "%a, %d %b %Y %H:%M:%S GMT");
$r->err_header_out('Last-Modified' => $lm);
my $meta = "<meta http-equiv=\"Last-Modified\" content=\"$lm\">\n";
my $fh;
unless ($fh = Apache::File->new($file)) {
$r->log_error("Couldn't open $file for reading: $!");
return SERVER_ERROR;
}
$r->send_http_header;
my $header = '<!-- FLastMod was here -->';
while(<$fh>) {
s!(<body [^>]*>)!$1$header!oi;
s!(</head[^>]*>)!$meta$1!oi;
s/<meta http-equiv=\"Content-Type\".*>/<!-- meta stripper was here -->/oi;
} continue {
$r->print($_);
}
return OK;
}
1;
__END__
Подключается этот модуль в конфиге сервера следующим образом:
<Files ~ "\.shtml">
SetHandler perl-script
PerlHandler Apache::FLastMod
</Files>
NB: этот модуль также вырезает заголовок META.Content-Type.