В этой статье я хочу исправить одну из моих ошибок, точнее не совсем ошибку, просто не очень удачный совет.
Нужно было использовать несколько файлов .htaccess для разных папок блога. Доступ для администратора получался немного ограниченным, например, статические ссылки не работали.
Для посетителей этот код роли не играет, они все равно увидят страницу с описанием ошибки, но вот поисковые боты – другое дело. Думаю, никому не захочется, чтобы в индекс поисковика попала фраза «Зайдите позже» вместо контента блога.
В общем, сейчас хочу рассказать о другом, на мой взгляд, более удачном решении.
Нужно будет выполнить всего два шага.
1) Создать страницу, которую будем показывать посетителям во время обслуживания сайта.
2) Добавить пару строк в файл .htaccess, который находится в корне блога.
Кстати, этот метод подойдет практически для любого сайта не зависимо от используемого движка.
Идея заключается в ограничении доступа на основании IP адреса. Т.е. при попытке доступа к сайту web сервер (apache) проверит ваш IP и если он не совпадет с заданным, то все запросы будут перенаправлены на специальную страницу.
Итак, приступим.
Шаг 1. Создаем страницу с сообщением о том, что сайт временно закрыт.
Назовем её maintain.php и разместим в корне сайта.
<?php
header('HTTP/1.0 503 Service Unavailable');
header('Retry-After: 3600');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Обслуживание сайта</title>
</head>
<body>
<h1>Извините, в данный момент сайт закрыт на обслуживание</h1>
<p>Зайдите немного позже</p>
</body>
</html>
Обсуждать тут особенно нечего. Саму страницу, конечно, лучше оформить в соответствии с общим дизайном сайта.
Но сейчас важнее заголовки (строки 2 и 3). Для их отправки используется стандартная функция PHP — header. В её первом параметре указываем заголовок.
Первый заголовок отправляет 503 HTTP код, а второй (Retry-After) – время, через которое рекомендуется обновить страницу. В данном примере я установил 1 час (3600 сек), но вы можете выбрать любой интервал времени по своему усмотрению.
Шаг 2. Определяем собственный IP.
Тут ситуация следующая. Если у вас статический IP адрес, то вы его знаете и определять ничего не надо ;)
Но большинство интернет провайдеров просит за него дополнительные деньги. И если вы эту услугу не заказывали, то при подключении IP адрес будет выдаваться вам каждый раз новый (на практике он меняется довольно редко).
Шаг 3. Делаем резервную копию файла .htaccess.
Например, с названием .htaccess_main.
Шаг 4. Добавляем проверку IP.
В качестве примера, рассмотрим .htaccess, который часто используется в блогах на WordPress.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Примечание. Правила в этом файле подходят для любого движка, в котором запросы обрабатываются скриптом index.php. Например, для сайтов, использующих фреймворк CodeIgniter такой .htaccess тоже вполне подойдет.
Добавляем две дерективы после RewriteBase /
RewriteCond %{REMOTE_ADDR} !=127.0.0.2
RewriteRule ^.* maintain.php [L]
Т.е. в результате получится.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} !=127.0.0.1
RewriteRule ^.* maintain.php [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Естественно, вместо 127.0.0.1 нужно указать свой реальный IP адрес.
Принцип работы предельно простой. В директиве RewriteCond (строка 5) мы сравниваем IP адрес посетителя с указанным. И если они не совпадают – отправляем посетителя на maintain.php (строка 6). Буква L в квадратных скобках указывает, что если это правило выполнилось, то обработку запроса нужно прекратить. Т.е. все последующие строки будут проигнорированы.
Если же вы сами заходите на сайт (IP-шники совпадают), то директива RewriteRule (в строке 6) пропускается и web сервер обрабатывает запрос как обычно.
Шаг 5. Восстанавливаем доступ к сайту.
Для этого просто восстанавливаем старый .htaccess файл из резервной копии.
Небольшое дополнение.
Если в процессе работы у вас изменится IP адрес, то вам нужно повторить шаг 2, создать .htaccess с новым IP и скопировать его в корень сайта по FTP.
Вот и все!
Все вопросы и замечания оставляйте в комментариях. Буду рад ответить или обсудить :-)
До встречи!