如何让php页面返回503错误(或任何非200)

时间:2010-05-03 20:11:00

标签: php http

前开发人员在PHP中编写或使用客户端 - 服务器api。它只是以非常简单的方式使用post / response将消息作为xml发送。问题是即使出现错误(例如:传递到服务器端的无效参数),我们也会得到一个带有这样一个页面的HTTP 200响应

<h4>Unknown error!</h4>

在firebug中,我可以看到实际的HTTP响应是200.当我们在PHP代码中以编程方式检测到这样做时,我们如何发送不同的响应(即:503)。

4 个答案:

答案 0 :(得分:78)

使用PHP的header函数发送代码(以及HTTP版本和您需要的任何其他标头)。更完整的信息:

When to send HTTP status code?

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

答案 1 :(得分:4)

我在一个遭到黑客入侵的网站上工作,不得不使用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>

答案 2 :(得分:2)

在你的脚本之上(或者实际上,在任何输出作为响应发送之前):

<?php header("HTTP/1.0 404 Not Found");或任何其他HTTP status code

答案 3 :(得分:0)

可以在这里找到实现这一目标的好课程:http://www.krisjordan.com/php-class-for-http-response-status-codes/ - 像这样使用它(在任何其他输出之前):

<?php header(StatusCodes::httpHeaderFor(503)); ?>