htaccess редирект со всех страниц на одну

DataLife Engine

Практически во всех современных cms предусмотрено отключение сайта на техническое обслуживание. Например, для Joomla 2.5 в общих настройках пункт "Сайт выключен (offline)"; для DLE в настройках системы пункт "Выключить сайт". Относительно WordPress ситуация решается установкой плагина Maintenance Mode или WP Maintenance Mode или другого аналога выбор достаточно широк.

Но что делать, если в процессе работ нужно полностью удалять Базу данных или файлы на хостинге, в таком случае стандартный функционал движков теряет эффективность. Или что делать, если используется самописная cms, в которой не предусмотрена функция отключения сайта на обслуживание? Или как отключить сайт на html?

Для всех перечисленных вариантов подойдет метод описанных ниже.

Создание страницы "Ведутся технические работы"

Во-первых нужно создать страницу-заглушку, на которую будет происходить перенаправление. Назовем её offline.php. Содержимое может быть стандартное:

<?php

header ('HTTP/1.0 503 Service Unavailable');

header ('Retry-After: 3600');

?>

<html>

<head>

<title>Ведутся работы</title>

</head>

<body>

<h1>Сайт закрыт на техническое обслуживание.</h1>

<h3>Извините за предоставленные неудобства!</h3>

</body>

</html>

Или можно использовать свою шаблонную страницу используя стили оформления и картинки. В таком случае вверху страницы прописываем только php-код:

<?php

header ('HTTP/1.0 503 Service Unavailable');

header ('Retry-After: 3600');

?>

Функция header ('HTTP/1.0 503 Service Unavailable'); отдаёт серверу ошибку 503, что значит: сайт временно недоступен.

header('Retry-After: 3600'); задаёт время автоматического обновления страницы в миллисекундах. Его можно поставить по максимуму.

Создание .htaccess файла

Во-вторых нужно создать файл .htaccess в корне сайта. Или, если такой файл уже есть,  дописать в него следующий код:

RewriteEngine On

RewriteBase /

RewriteCond %{REMOTE_ADDR} !=192.168.0.1 # IP-адрес сайта. Также можно использовать домен.

RewriteCond %{REQUEST_URI} !^/css # исключения из редиректа, в данном случае папка css

RewriteRule ^.* offline.php [L]

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

При использовании в .htaccess записи такого вида данные будут подменяться из файла offline.php, а в адресной строке будут отображаться истинные адреса.

Второй вариант:

RewriteEngine On

RewriteCond %{REQUEST_URI} !^/offline.php

RewriteCond %{REQUEST_URI} !^/img

RewriteRule ^(.*)$ /offline.php [R=302,L]

При использовании в .htaccess записи такого вида будет происходить 302-й редирект на страницу offline.php, что означает: страница временно находится по новому адресу.

Перед обновлением, нужно залить эти два файла в корень сайта.  После обновления файл .htaccess удалить или переименовать, например в .htaccess~ или заменить старым, если такой имелся.

Поделиться с друзьями
Яковенко Андрей

Занимаюсь разработкой сайтов на cms WordPress, Joomla, DLE, OpenCart с 2011 года.
На данный момент занимаюсь клиентской поддержкой, доработками сайтов. А так же даю консультации и уроки по работе с этими cms.

Оцените автора
Yakovenko&Co
Добавить комментарий

  1. LDomen

    Вот зачем на странице ставить защиту от копирования информации, если ваша статья о программировании и в ней выкладываются куски кода, которые посетители сайта захотят скопировать? Я сначала обрадовался, что на таком замечательном сайте нашёл решение… Но потом так же быстро разочаровался до такой степени, что решил написать это недовольный комментарий

    Ответить
    1. Яковенко Андрей автор

      Сори, LDomen, не подумал, что это может мешать. Спасибо, что сообщили об этой проблемке.