Сайт на обслуживании. Как перенаправить посетителей?

Мой сайт PHP на обслуживании. Как перенаправить посетителей на отдельную страницу "сайт в обслуживании"?

Я что-то слышал о app_offline.htm для ASP.NET.

Есть ли что-то подобное для PHP?

  • Я хочу, чтобы каждая страница с «mysite.com» перенаправлялась на «maintenance.php»;
  • Я не хочу делать минимальную модификацию существующих страниц сайта, в идеале никто.

Версия Apache 2.2.15 под Linux
Версия PHP 5.2.13


person serhio    schedule 27.03.2010    source источник
comment
Создайте пользовательскую страницу обслуживания или просто напишите сайт в обслуживании и перенаправьте всех пользователей, используя местоположение заголовка, найдите его на php.net.   -  person ant    schedule 28.03.2010
comment
php 5.* немного неоднозначен: 5.2 сильно отличается от 5.3..   -  person Strae    schedule 28.03.2010
comment
oricum, проблема больше связана с Apache, чем с PHP   -  person serhio    schedule 28.03.2010


Ответы (5)


Вы действительно не даете достаточно подробностей (сервер, фреймворк и т. д.). Если вы используете 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]
person Amy B    schedule 27.03.2010
comment
В прошлый раз, когда я проверял, переопределение URL-адресов не работает в Windows - вы можете заметить, что - person anonymous coward; 28.03.2010
comment
Что ты имеешь в виду? Я могу использовать mod_rewrite в Windows просто отлично. - person Ikke; 28.03.2010
comment
Действительно? Как я уже сказал - в прошлый раз, когда я проверял, он вообще не работал - person anonymous coward; 28.03.2010
comment
У меня есть Apache и PHP, см. подробности в редактировании. Я установил Maintenance.html вместо back-soon-updating.php. Любые изменения на сайте. - person serhio; 28.03.2010
comment
@serhio: вы также можете изменить 301 (постоянное перенаправление) на 307 (временное перенаправление). В противном случае закладки посетителей будут обновлены до maintenance.html, а поисковые системы будут думать, что других страниц больше не существует, тогда как на самом деле вы просто обновляете содержание своего сайта. - person Zach Johnson; 28.03.2010
comment
Конечно, mod_rewrite работает на Apache для Windows, всегда есть AFAIK. Что создает трудности, так это создание файла .htaccess — проводник Windows не позволит вам сделать это из-за префикса точки. Вы можете обойти это с помощью сторонних инструментов, таких как Filezilla, или изменить AccessFileName в httpd.conf. - person Pekka; 28.03.2010

Поскольку мой 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, и это изображение должно оставаться видимым из-за глобального перенаправления.

person serhio    schedule 28.03.2010

Способ PHP: создайте файл Maintenance.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;
}
person Vidar Vestnes    schedule 27.03.2010
comment
я должен добавить это на все мои веб-страницы? после завершения технического обслуживания следует ли удалить этот код со всех существующих страниц? - person serhio; 28.03.2010

Вы также должны установить правильный заголовок в ответ (код ответа 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

Это должно дать вам то, что вы хотите.

person Anshul    schedule 27.03.2010
comment
1. это работало на вашей локальной установке? 2. включен ли .htaccess на вашем хосте Linux? - person Anshul; 05.04.2010

Не существует «Глобального пути», либо вам нужно настроить свой веб-сервер, чтобы перейти на определенный сайт, либо, если вы включаете страницу везде, добавьте

header("Location: offline.php");
die();

Для временного перенаправления ваших пользователей.

person Gnutt    schedule 27.03.2010
comment
я должен добавить это на все мои веб-страницы? после завершения технического обслуживания следует ли удалить этот код со всех существующих страниц? - person serhio; 28.03.2010
comment
да, еще один способ облегчить удаление позже, это сделать ‹?php include(header.php);?› и сделать заголовок(Location: offline.php); умереть(); таким образом, вам нужно только удалить перенаправление из вашего header.php. И вы не рискуете оставить редирект на любой забытой странице. - person Gnutt; 29.03.2010