Для популярных движков существуют расширения, которые помогают решить эту проблему. Например, у WordPress есть популярный плагин WP-Secure, который помимо кучи функций по защите и архивированию позволяет и выставить заглушку «технические работы».

Однако я хочу поделиться с вами простым и гибким способом, как можно сделать то же самое без всяких дополнительных плагинов и настроек. Этот метод неоднократно применялся на практике и подходит для сайтов на любых CMS и любых языках программирования. Ничего авторского в нём нет, технология изначально была нагуглена и модернизирована в процессе работы. А именно – по просьбе одного из моих постоянных клиентов, который хотел закрыть интернет-магазин на время внесения изменений и в то же время иметь возможность самому смотреть, что же там происходит.

Итак, всё делается в два этапа.

Этап 1. Создаём файл-заглушку

Назовём его, например, reconstruction.html. Выглядеть он может примерно так.

<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="UTF-8">
	<meta name="robots" content="noindex, nofollow">
	<title>Сайт на реконструкции</title>
	<style>
		main {
			max-width: 60%;
			margin: 100px auto 0 auto;
			padding: 20px;
			border: 1px solid black;
			text-align: center;
			font-size: 20px;			
		}
	</style>
</head>
<body>
	<main>
		<p>Уважаемый пользователь, на сайте ведутся технические работы!</p>
		<p>Всё будет работать уже завтра.</p>
		<p>Приносим извинения за неудобства</p>
		<img src="tech_works.jpg" alt=”photo”>
	</main>
</body>
</html>

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

технические работы

Просьба не придираться к дизайну, чукча не дизайнер… он здесь не главное. Конечно, если вы хотите закрыть сайт на долгое время, то можно придумать что-нибудь посимпатичнее. Пятая строчка вписана для того, чтобы заглушку не индексировали поисковики.

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

<a href=”https://наш запасной сайт”>Пока вы можете почитать наши новости здесь</a>

Этап 2. Вносим изменения в htaccess

Копируем наш файлик-заглушку в корень сайта. Создаём там файл .htaccess либо открываем существующий. И вверху дописываем следующее

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} !/reconstruction.html$
	RewriteCond %{REMOTE_ADDR} !^176\.113\.11\.22
	RewriteCond %{REMOTE_ADDR} !^176\.113\.11\.23
	RewriteRule $ /reconstruction.html [R=302,L]
</IfModule>

Давайте разбираться, что делает этот код. Первая строка подключает модуль переадресации на сервере, последняя завершает список инструкций для модуля. Внутри мы видим правила преобразования. Они записываются в следующем виде:

RewriteCond [СТРОКА ДЛЯ СРАВНЕНИЯ] [УСЛОВИЕ] [ФЛАГИ]

RewriteCond [СТРОКА ДЛЯ СРАВНЕНИЯ] [УСЛОВИЕ] [ФЛАГИ]

RewriteRule [ШАБЛОН] [СТРОКА ПОДСТАНОВКИ] [ФЛАГИ]

Строки RewriteCond — задают условия для срабатывания следующего за ними правила RewriteRule.

Во второй и пятой строках мы прописали адрес, на который переадресуем пользователя. Помимо внутренней страницы это может быть и совершенно другой ресурс, хотя, конечно, делать так не вполне корректно.

В третьей и четвёртой строках – указываем IP-адреса, для которых будут исключения. Вписывайте столько строчек, сколько адресов вам требуется. В данном случае сайт будет виден с адресов 176.113.11.22 и 176.113.11.23. Можно указать только одну строку или столько, сколько вам потребуется. Проверить, что ваш сайт не виден со сторонних IP-адресов можно, например, с помощью анонимайзера. Пожалуй, единственный минус этого способа – если у вас или у вашего заказчика установлен динамический IP, список исключений может стать слишком длинным.

Заключение

Таким нехитрым способом вы можете закрыть на технические работы сайты, созданные на любых CMS и любых языках программирования. При этом посетители с привилегированных IP-адресов смогут видеть всё происходящее, а сторонние посетители только табличку «технические работы» и дополнительную информацию, которую вы указали. Для отключения достаточно закомментировать либо удалить соотвествующие строке в файле .htaccess.