Участок в ремонте. Как перенаправлять посетителей?
Мой PHP-сайт в обслуживании. Как перенаправить посетителей на одну страницу "сайт в обслуживании"?
Я кое-что слышал о app_offline.htm
для ASP.NET .
Есть ли что-то подобное для PHP?
- Я хочу, чтобы каждая страница из"mysite.com "быть перенаправленным на"maintenance.php ";
- Я не хочу вносить минимальные изменения в существующие страницы сайта, в идеале никто.
Версия Apache 2.2.15 под Linux
Версия PHP 5.2.13
5 answers
Вы действительно не даете достаточно подробностей (сервер, фреймворк и т.д.). Если вы используете Apache, добавьте в свой файл .htaccess:
# prevent infinite redirect loops
RewriteCond %{REQUEST_URI} !^/back-soon-updating.php$
# not on development server
RewriteCond %{HTTP_HOST} .com$
# let admins enter to verify the update has worked
RewriteCond %{QUERY_STRING} !c=u
RewriteRule .* back-soon-updating.php [L,R=307]
Как мой Apache в Linux, я делаю следующее:
Создал файл ".htaccess" в корневом каталоге сайта со следующим содержимым:
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{REQUEST_URI} !/images/mainetnance.png$
RewriteCond %{REQUEST_URI} !/maintenance.php$
# here filter the developer's IP/
#RewriteCond %{REMOTE_HOST} !^888\.888\.888\.888
RewriteRule $ /maintenance.php [R=302,L]
Следует отметить, что я добавил для фильтрации файлов.png, потому что я использую изображение (/images/mainetnance.png) для maintenance.php , и это изображение должно оставаться видимым из-за глобального перенаправления.
Способ PHP: Создайте maintainance.php и добавьте это в свой index.php :
$offline = true; // <== change this to false when you go online again.
if($offline){
header("Location: maintainance.php"); // <== redirects all to maintainance.php
exit;
}
Вы также должны установить правильный заголовок в ответе (код ответа HTTP 503). Есть только способы сделать это с помощью Apache, используя mod_rewrite
и mod_headers
Однако для простого решения без необходимости mod_headers
выполните следующие действия
- Используйте свой apache conf/.htaccess, как упоминалось Coronatus, чтобы перенаправить всех пользователей, кроме разработчиков, на скрипт обслуживания PHP. Убедитесь, что перенаправление действительно временное (используя код перенаправления 307, как упоминал Зак)
- В вашем PHP-скрипт, установите заголовок ответа следующим в самом начале скрипта.
header('HTTP/1.1 503 Service Temporarily Unavailable') //send the proper response code
header('Retry-After: 3600') //Retry after an hour
Это должно дать вам то, что вы хотите.
Нет "глобального способа", либо вам нужно настроить свой веб-сервер, чтобы перейти на определенный сайт, либо, если вы везде включаете страницу, добавьте
header("Location: offline.php");
die();
Для временного перенаправления ваших пользователей.