Архив за месяц: Август 2013

Правильно закрываем сайт на техобслуживание

Был немного удивлен тем, как на текущей работе закрывают сайт на техобслуживание: перенаправляют все запросы на 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.