Участок в ремонте. Как перенаправлять посетителей?


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

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

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

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

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

Author: serhio, 2010-03-28

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]
 14
Author: Amy B, 2010-03-28 11:49:30

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

 5
Author: serhio, 2010-03-28 13:41:15

Способ 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;
}
 1
Author: Vidar Vestnes, 2010-03-27 21:17:53

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

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

 1
Author: Anshul, 2010-03-27 22:50:24

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

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

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

 0
Author: Gnutt, 2010-03-27 21:18:21