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


Практически во всех современных 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~ или заменить старым, если такой имелся.

2 ответов

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

Оставить комментарий