in Профессиональное

Временная блокировка проекта на symfony

Ошибки или плановые мероприятия зачастую требуют чтобы некоторое время пользователи не трогали сайт, над которым измывается релиз-менеджер (ну или разработчик). Ниже небольшой хинт как сделать удобную заглушку для проекта на symfony 1.2 (для symfony 1.1 и 1.0 также можете воспользоваться данным руководством).

Итак, сначала подготовим заглушку которая будет отображаться пока мы будем выполнять работы:

mkdir config/error
vim config/error/unavailable.php

Думаю вы захотите оформить данную страницу в стиле основного сайта. Однако имейте в виду, что тут нужно воспользоваться чистым HTML (мало ли что сломаете при обновлении, да и от ошибок эту заглушку тоже можно будет использовать).

Единственным дополнением, которое потребуется сделать на PHP – передавать нужный HTTP заголовок. Также думаю вы не хотели бы чтобы поисковые боты индексировали эту страничку:

<?php
header('HTTP/1.0 503 Service Unavailable');
header('Retry-After: 1800');
>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="60" />
<meta name="title" content="Технические работы на сайте" />
<meta name="robots" content="noindex, nofollow" />
<meta name="language" content="ru" />
</head>
<body>
<h1>Технические работы на сайте.</h1>
<p>Не пугайтесь, все под контролем - как только мы выполним все запланированные работы, сайт снова заработает.</p>
</body>
</html>

Отлично. Теперь нам надо немного подправить конфигурацию виртуального хоста (также туда рекомендуется вынести конфигурацию из .htaccess если вы еще этого не сделали). Добавляем следующие строки:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{DOCUMENT_ROOT}/unavailable.php -f
    RewriteCond %{REQUEST_FILENAME} !^.*.css|js|gif|jpg|jpeg|png|ico$
    RewriteRule ^(.*)$ /unavailable.php [L]
</IfModule>

Первая и вторая строки – без комментариев. Во третьей строке проверяем есть ли в docroot файл unavailable.php. В 4-й строке проверяем расширение файла (на картинки, стили и скрипты наша блокировка не распространяется). В 5-й строке мы перенаправляем все запросы на unavailable.php, если предыдущие два условия истинны.

Окей, перезапустим httpd, если правили его конфигурацию (если правили .htaccess этого делать не нужно). Если мы сейчас откроем сайт в браузере – ничего не изменится. Для того чтобы заблокировать сайт необходимо скопировать unavailable.php в docroot.

cp config/error/unavailable.php web/
.

Все – больше ничего делать не нужно. Сайт заблокирован. Для разблокирования необходимо удалить unavailable.php

rm web/unavailable.php
.

p.s. раз уж взялись, то можно облагородить страницу с ошибкой 500 (которая отображается когда symfony перехватывает исключение). Мы уже создали директорию config/error. Теперь необходимо создать в ней файл error.html.php и оформить его в стиле сайта (также как было сделано для заглушки сайта). Только не забывайте изменить заголовок ответа на

HTTP/1.0 500 Internal Server Error
.