Был немного удивлен тем, как на текущей работе закрывают сайт на техобслуживание: перенаправляют все запросы на closed.php. Это не совсем удобно для посетителей, т.к. если в момент начала работ кто-то был на сайте, то в итоге окажется на непонятной странице. И очень не удобно для поисковиков, т.к. они получат какой-то мусор.
Правильным решением будет на время проведения технических работ на все запросы отдавать содержимое специальной страницы, вместе с 503 кодом состояния HTTP.
Для этого файл .htaccess
должен выглядеть следующим образом:
RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ RewriteCond $1 !^(closed\.php) RewriteRule ^(.*)$ /closed.php [L]
А файл closed.php
должен быть таким:
<?php $online = '22.01.2014 14:40 +0400'; $online = strtotime($online); header('Content-Type: text/html; charset=utf-8'); header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: '.gmdate(DATE_RFC822, $online)); ?> <html> <head> <meta charset="utf-8" /> <title>example.com: ведутся технические работы</title> </head> <body> <div style="text-align: center; width: 300px; height: 200px; position: absolute; top: 50%; left: 50%; margin-top: -100px; margin-left: -150px;"> <h2>На сайте ведутся технические работы. Приблизительное время включения <?php echo date('H:i d.m.Y', $online); ?>.</h2> </div> </body> </html>
Исходный код на GitHub.