Сайт в обслуживании. Как перенаправить посетителей? - PullRequest
3 голосов
/ 28 марта 2010

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

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

Есть ли что-то похожее для PHP?

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

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

Ответы [ 5 ]

14 голосов
/ 28 марта 2010

Вы действительно не даете достаточно информации (сервер, фреймворк и т. Д.). Если вы используете 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]
6 голосов
/ 28 марта 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, и это изображение должно оставаться видимым из-за глобального перенаправления.

2 голосов
/ 28 марта 2010

Способ PHP: создайте файл keepance.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 голос
/ 28 марта 2010

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

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

0 голосов
/ 28 марта 2010

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

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

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

...