I wrote an Apache Perl Module that I think can be of use to others who maintain webservers and once in a while have to notify web users with an urgent message. This module is currently being on the servers I maintain. The proposed module name is Apache::Motd (Message of the Day). It basically mimics the functionality of the motd on UNIX systems. If this feature already exist, then I guess we can ignore this one, otherwise I can upload to CPAN. This module allows you to display a message before the visitor enters your site without the need to modify webpages or web application code/logic. The message can be a "Server Going Down in So many hours", "Terms of Use", "News Flashes",etc. Once the visitor gets the message, a cookie is set and the visitor is redirected to their original URI after N seconds. Comments/Suggestions?? Thanks, -Carlos Here is the code and POD. package Apache::Motd; use strict; use vars qw($VERSION); $VERSION = '0.01'; use Apache; use Apache::Cookie; use Apache::Constants qw(:common); sub handler { my $r = shift; my $uri = $r->uri; my $cn = $r->dir_config('CookieName') || 'seenMOTD'; my $file = $r->dir_config('MessageFile') || 0; my $exp = $r->dir_config('ExpireCookie') || '+1d'; my $sec = $r->dir_config('RedirectInSecs') || 10; unless ($file) { $r->log_error("Apache::Motd::Error : No Message File Specified!"); return SERVER_ERROR; } return OK unless $r->is_initial_req; ## Lookup cookie state my $cookies = Apache::Cookie->new($r)->parse; if (my $c = $cookies->{$cn}) { my $cv = $c->value; return OK if $cv; } ## Apparently this is your first visit ## Prepare cookie information my $cookie = Apache::Cookie->new($r, -name => $cn,-value => '1',-expires => $exp ); $cookie->bake; ## Print message $file or return custom server error unless (open MSG,$file) { $r->log_error("Apache::Motd::Error : Unable to load message: $file"); return SERVER_ERROR; } ## Slurp message $file my $msg = ""; { local $/; $msg = <MSG>; } close MSG; $msg =~ s/<VAR_URI>/$uri/g; $msg =~ s/<VAR_REDIRECT>/$sec/; $r->send_http_header('text/html'); $r->print($msg); return DONE; } 1; __END__ =head1 NAME Apache::Motd - Mimic motd (Message of the Day) on a webserver =head1 SYNOPSIS httpd.conf: (in Server, <Location>, <Directory>, <Files>) PerlPostHeaderParserHandler Apache::Motd PerlSetVar MessageFile /path/to/message/file ---optional (if you are satisified with the defaults)--- PerlSetVar RedirectInSecs N PerlSetVar CookieName PerlSetVar ExpireCookie =head1 DESCRIPTION Apache::Motd allows you to force/display a message before the visitor enters your site without the need to modify webpages or web application code/logic. The message can be a "Server Going Down in So many hours", "Terms of Use", "News Flashes",etc. Once the visitor gets the message, a cookie is set and the visitor is redirected to their original URI after N seconds. All variables except MessageFile are optional. RedirectInSecs - the number of secs to wait before redirecting to original URI [Default: 10] CookieName - the name of the cookie, value is set to 1 [Default: seenMOTD] ExpireCookie - exipration time of cookie [Default: +1d i.e. one day] MessageFile - filesystem path to the file** containing the message **file: the file *should* be an html file with the following requirements. 1. The message file should include a meta tag that handles the redirect like so: <a meta http-equiv="Refresh" content="<VAR_REDIRECT>;url=<URI>"> where the <VAR_REDIRECT> will be replaced by the value of the variable RedirectInSecs and <VAR_URI> with the original URI. Ommiting the meta tag will prevent the user from being redirected. <VAR_URI> can also be used as a "click here to prceed" link, if the user chooses not to wait. Example: <a href="<URI>">click to proceed</a> See sample provided: motd.txt =head1 REQUIREMENTS Apache::Cookie But I can (might) illiminate this requirement if (when) I implement my own parse incoming header and look for CookieName routine. =head1 SEE ALSO perl(1), mod_perl(1), Apache(3) =head1 AUTHOR Carlos Ramirez <[EMAIL PROTECTED]> =head1 COPYRIGHT Copyright 2000 Carlos Ramirez - all rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut