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

Если сайт закрыт на обслуживание, то необходимо отправлять заголовок с 503 кодом (Service Unavailable).

Для посетителей этот код роли не играет, они все равно увидят страницу с описанием ошибки, но вот поисковые боты – другое дело. Думаю, никому не захочется, чтобы в индекс поисковика попала фраза «Зайдите позже» вместо контента блога.

В общем, сейчас хочу рассказать о другом, на мой взгляд, более удачном решении.

Нужно будет выполнить всего два шага.

1) Создать страницу, которую будем показывать посетителям во время обслуживания сайта.

2) Добавить пару строк в файл .htaccess, который находится в корне блога.

Кстати, этот метод подойдет практически для любого сайта не зависимо от используемого движка.

Идея заключается в ограничении доступа на основании IP адреса. Т.е. при попытке доступа к сайту web сервер (apache) проверит ваш IP и если он не совпадет с заданным, то все запросы будут перенаправлены на специальную страницу.

Итак, приступим.

Шаг 1. Создаем страницу с сообщением о том, что сайт временно закрыт.

Назовем её maintain.php и разместим в корне сайта.









Извините, в данный момент сайт закрыт на обслуживание

Зайдите немного позже

Обсуждать тут особенно нечего. Саму страницу, конечно, лучше оформить в соответствии с общим дизайном сайта.

Но сейчас важнее заголовки (строки 2 и 3). Для их отправки используется стандартная функция PHP – header. В её первом параметре указываем заголовок.

Первый заголовок отправляет 503 HTTP код, а второй (Retry-After) – время, через которое рекомендуется обновить страницу. В данном примере я установил 1 час (3600 сек), но вы можете выбрать любой интервал времени по своему усмотрению.

Шаг 2. Определяем собственный IP.

Тут ситуация следующая. Если у вас статический IP адрес, то вы его знаете и определять ничего не надо ;)

Но большинство интернет провайдеров просит за него дополнительные деньги. И если вы эту услугу не заказывали, то при подключении IP адрес будет выдаваться вам каждый раз новый (на практике он меняется довольно редко).

Поэтому заходим на эту страницу и переписываем свой текущий IP-шник.

Шаг 3. Делаем резервную копию файла .htaccess.

Например, с названием .htaccess_main.

Шаг 4. Добавляем проверку IP.

В качестве примера, рассмотрим .htaccess, который часто используется в блогах на WordPress.

RewriteCond %{REMOTE_ADDR} !=127.0.0.2
RewriteRule ^.* maintain.php [L]

Примечание. Правила в этом файле подходят для любого движка, в котором запросы обрабатываются скриптом index.php. Например, для сайтов, использующих фреймворк CodeIgniter такой .htaccess тоже вполне подойдет.

Добавляем две дерективы после RewriteBase /


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]

Естественно, вместо 127.0.0.1 нужно указать свой реальный IP адрес.

Принцип работы предельно простой. В директиве RewriteCond (строка 5) мы сравниваем IP адрес посетителя с указанным. И если они не совпадают – отправляем посетителя на maintain.php (строка 6). Буква L в квадратных скобках указывает, что если это правило выполнилось, то обработку запроса нужно прекратить. Т.е. все последующие строки будут проигнорированы.

Если же вы сами заходите на сайт (IP-шники совпадают), то директива RewriteRule (в строке 6) пропускается и web сервер обрабатывает запрос как обычно.

Шаг 5. Восстанавливаем доступ к сайту.

Для этого просто восстанавливаем старый .htaccess файл из резервной копии.

Небольшое дополнение.

Если в процессе работы у вас изменится IP адрес, то вам нужно повторить шаг 2, создать .htaccess с новым IP и скопировать его в корень сайта по FTP.

Вот и все!

Все вопросы и замечания оставляйте в комментариях. Буду рад ответить или обсудить :-)

До встречи!

This entry was posted in Apache. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>