Бывший разработчик написал или клиент-сервер api в PHP. Он просто отправляет сообщения как xml, используя пост / ответ очень упрощенным способом. Проблема в том, что даже при наличии ошибки (например: неверные аргументы, переданные на сервер) мы получаем ответ HTTP 200 со страницей, подобной этой
<h4>Unknown error!</h4>
В firebug я вижу, что фактический HTTP-ответ – 200. Как мы можем отправить другой ответ (то есть: 503), когда мы программно обнаруживаем в нашем php-коде, что это целесообразно.
Используйте функцию header
PHP для отправки кода (вместе с версией HTTP и любыми другими заголовками, которые вам нужны). Дополнительная информация:
Когда отправлять код статуса HTTP?
http://php.net/manual/en/function.header.php
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 300');//300 seconds
Я работал над сайтом, который был взломан, и ему пришлось использовать HTACCESS для этого.
<IfModule mod_rewrite.c> RewriteEngine on # let this (iescaped) IP address see the real site: # RewriteCond %{REMOTE_ADDR} !^123.45.67.89 RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC] RewriteCond %{REQUEST_URI} !.(jpe?g?|png|gif|css|js) [NC] RewriteRule .* /maintenance.php [R=503,L] </IfModule>
В дополнение к вашему сценарию (или действительно, прежде чем какой-либо вывод будет отправлен как ответ):
<?php header("HTTP/1.0 404 Not Found");
или любой другой код состояния HTTP .
Хороший класс для достижения этого можно найти здесь: http://www.krisjordan.com/php-class-for-http-response-status-codes/ – используйте его так (перед любым другим выходом):
<?php header(StatusCodes::httpHeaderFor(503)); ?>