503 Service Temporarily Unavailable

Спасительный код ответа 503

Каждому из владельцев сайтов периодически приходится проводить какие-то технические работы по настройке, профилактике и обновлению своих сайтов, и блоггеры – не исключение, движок WordPress’а меняется довольно часто. Однако, казалось бы, такое простое действие, хранит в себе скрытую угрозу. Какую же? Представьте, что вы, ничего не подозревая, копируете обновленные файлы или переносите что-то куда-то и в этот момент ваш сайт вздумал посетить его величество бот. И что он может получить? Как минимум 404 File Not Found ошибку, как максимум 500 Internal Server Error. В ответ на такое «неуважение» бот может «обидеться» и занести страницу в «черный список», что в конечном итоге может привести к потери ее позиции в результатах поиска, а в случае, если этот бот Google, то и потери pagerank’а. Не очень хорошая перспектива, не так ли?

А что, если взять и каким-нибудь способом сообщить поисковому роботу, что сайт в данный момент немного не работоспособен и «попросить» бота зайти попозже? И к счастью такой способ есть!

Вот, что говорится на блоге Google Webmaster Central:

Если мой сайт находится на техническом обслуживании, как я могу сообщить Googl’у о том, что ему следует зайти на сайт позже, чтобы проиндексировать страницу, которая в данный момент недоступна?

Вы должны скофигурировать свой веб-сервер так, чтобы он обрабатывал ошибку 503 Service Temporarily Unavailable, т.е. возвращал код 503 вместо обычного 200. Это даст понять Googlebot’у, что сервер в принципе рабочий и он может зайти на страницу позже.

Для настройки сервера можно воспользоваться , чтобы отдать Googlebot’у и/или другим ботам заголовок 503 Service Temporarily Unavailable или создать некоторый программный код. В дополнение необходимо передать заголовок Retry-After для указания временного интервала, по истечении которого, роботу стоит посетить страницу.

Читайте также:  Php вывести переменную echo

Что такое 503 Service Temporarily Unavailable

Сервер в данный момент недоступен для обработки запроса вследствие перегрузки или технических работ на нем. Подразумевается, что это временное явление, которое завершится через определенное время. Время может быть указано посредствоv заголовка Retry-After . Если заголовок Retry-After не указан, то клиент вынужден будет рассматривать ответ сервера как ошибку 500 Internal Server Error.

Что такое Retry-After

Заголовок ответа Retry-After может использоваться совместно с ответом a 503 Service Temporarily Unavailable, чтобы указать как долго запрашиваемый сервис будет недоступен для клиента. Этот заголовок может быть использован с любым 3xx (Redirect) ответом для указания минимального времени, которое клиенту необходимо будет подождать прежде, чем выполнить перенаправление. Значение этого параметра может задаваться как в формате HTTP-даты или же как целое количество секунд.

Retry-After: Fri, 31 Dec 1999 23:59:59 GMT Retry-After: 120

Отсылаем 503 ошибку только Googlebot’у

В файл вносим следующие строки:

Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond % ^.*(Googlebot|Googlebot|Mediapartners|Adsbot|Feedfetcher)-?(Google|Image)? [NC] # or RewriteCond % ^.*google.* [NC] RewriteRule .* /503.php 

Отсылаем 503 ошибку роботам, а людям страницу об ошибке

Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond % ^.*(Googlebot|Googlebot|Mediapartners|Adsbot|Feedfetcher)-?(Google|Image)? [NC] RewriteCond % !^/503\.php [NC] RewriteRule .* /503.php RewriteCond % !^XXX\.XXX\.XXX\.XXX RewriteCond % !^/404\.php [NC] RewriteRule .* /under-development-explain.html [R=302,L]

Ниже приведен пример, как реализовать обработку ошибки 503 с помощью языка программирования (в данном случае PHP):

ob_start(); header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 3600'); header('X-Powered-By:'); ?>    

Сайт временно недоступен

Сайт временно недоступен в связи с техническими работами, проводимыми на сервере. Пожалуйста посетите наш сайт позже.

Надеюсь, теперь ваши блоги станут немного защищенные.

Источник

PHP: Send a 503 Service Temporarily Unavailable header.

In this tutorial, we will show you how to return a “503 Service Temporarily Unavailable” status code using PHP.

Читайте также:  Регулярные выражения гласные буквы java

This header is useful if you are carrying out maintenance. You can also use it if a technical issue is temporarily preventing your app from working correctly.

By sending a 503 HTTP response code, we are letting the client know that something is “wrong” at the moment and that they should retry at a later stage. It also helps to prevent search engines from indexing broken web apps, etc.

Using PHP’s header function to respond with a 503 HTTP status code.

In this example, we will use PHP’s header function to respond with a 503 HTTP status code:

//Using PHP's header function to send a 503 //Service Temporarily Unavailable status code to the client. header($_SERVER["SERVER_PROTOCOL"]." 503 Service Temporarily Unavailable", true, 503); //The number of seconds that the client should //wait before retrying. $retryAfterSeconds = 240; //Send a Retry-After header to the client. header('Retry-After: ' . $retryAfterSeconds); //Send a message to the browser so that the user //knows what is going on. echo '

503 Service Temporarily Unavailable

'; echo '

Our site is currently under maintenance.

'; //Kill the PHP script. exit;
  1. We sent a “503 Service Temporarily Unavailable” status code to the client using PHP’s header function. Note that we used $_SERVER[“SERVER_PROTOCOL”] because we cannot assume that the client will be using HTTP/1.1. For all we know, they could be using HTTP/1.0.
  2. We sent a Retry-After header to the client. This header tells the client how many seconds they should wait before trying again. Note that the client can simply ignore this header if they want to. Thankfully, bots and crawlers such as Googlebot will honor it.
  3. Finally, we printed a basic “under maintenance” message and exited the PHP script.
Читайте также:  Валидатор css от w3c

If you do not provide a custom message, browsers such as Chrome will display the following message:

503 Chrome

Personally, I think that the default 503 error message doesn’t provide enough information to the user.

Using the http_response_code function to return a 503 error.

If you are using PHP version 5.4.0 or above, then you can send a 503 response code using the http_response_code function:

//Use PHP's http_response_code function to send a 503 //Service Temporarily Unavailable status code to the client. http_response_code(503); //Seconds until the client should retry. $retryAfterSeconds = 240; //Retry-After header. header('Retry-After: ' . $retryAfterSeconds); //Custom message. echo '

503 Service Temporarily Unavailable

'; echo '

Our site is currently under maintenance.

'; //Exit the script. exit;

The code above works the exact same way as the PHP code in our first example.

The only difference is that you don’t have to manually write out the full header details.

For other useful HTTP response codes, see:

Источник

Оцените статью