Carlao's answer is a good solution but if you want a more powerful maintenance system, I rather suggest you to use the 503 error code.
From the Status Code Definitions page
503 Service Unavailable
The server is currently unable to
handle the request due to a temporary
overloading or maintenance of the
server. The implication is that this
is a temporary condition which will be
alleviated after some delay. If known,
the length of the delay MAY be
indicated in a Retry-After header. If
no Retry-After is given, the client
SHOULD handle the response as it would
for a 500 response.
Assuming you can create new .php pages, create a maintenance.php file with the following content.
<?php
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Retry-After: 3600');
?>
<!DOCTYPE html>
<html>
<head>
<title>Maintenance</title>
</head>
<body>
<h1>Maintenance</h1>
</body>
</html>
Then paste the following Apache configuration into your .htaccess file.
RewriteEngine On
RewriteCond %{REQUEST_URI} !/maintenance\.php$
RewriteRule .* /maintenance.php
You can even add more RewriteCond to customize the behavior. For example, you can decide to skip the rule for your IP address so that you can easily check a preview while Apache is serving the maintenance page to all other clients.
RewriteEngine On
RewriteCond %{REMOTE_HOST} !^192\.168\.1\.1
RewriteCond %{REQUEST_URI} !/maintenance\.php$
RewriteRule .* /maintenance.php