Закрываем доступ к сайту с помощью .htaccess и PHP

В этой статье я хочу исправить одну из моих ошибок, точнее не совсем ошибку, просто не очень удачный совет.
Дело в том, что недавно я просматривал собственные посты и заметил, что в одном из них задача решается далеко не лучшим образом. Речь шла о блокировке доступа к блогу на движке WordPress.
Решение, которое я тогда предложил, работоспособное и им вполне можно пользоваться. Но только какое-то оно сложное
Нужно было использовать несколько файлов .htaccess для разных папок блога. Доступ для администратора получался немного ограниченным, например, статические ссылки не работали.
И, самое главное. Как абсолютно верно заметил Олег Лобач в комментариях к тому посту, если сайт закрыт на обслуживание, то необходимо отправлять заголовок с 503 кодом (Service Unavailable).
Для посетителей этот код роли не играет, они все равно увидят страницу с описанием ошибки, но вот поисковые боты – другое дело. Думаю, никому не захочется, чтобы в индекс поисковика попала фраза «Зайдите позже» вместо контента блога.
В общем, сейчас хочу рассказать о другом, на мой взгляд, более удачном решении.
Нужно будет выполнить всего два шага.
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 адрес будет выдаваться вам каждый раз новый (на практике он меняется довольно редко).
Поэтому заходим на эту страницу и переписываем свой текущий 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.
Вот и все!
Все вопросы и замечания оставляйте в комментариях. Буду рад ответить или обсудить
До встречи!
Интересно почитать
Штукатурка кирпича по пеноблокам – достаточно сложная операция… но только не для профессионалов!
Узнать все объявления белоруссии вы сможете с помощью нашего сайта.
Понравилась статья? Подписывайтесь на продолжение
!
Опубликовано в PHP, Web разработка, htaccess View Comments
-
Andrey
-
Владимир
-
Николай
-
Владимир
-
Владимир
-
Андрей
-
Андрей
-
Владимир
-
Владимир
-
Андрей
-
Морская Сова
-
Владимир
-
zavodptica
-
Олег
-
Владимир
-
Владимир
-
jylia
-
Seroga
-
Владимир
-
Vizor
-
Владимир
-
Владимир
-
k0ev
-
Владимир
-
k0ev
-
Владимир
-
Lander








