我正在创建一个API,而我正在使用外部客户端测试CRUD的功能。
为了能够跳过URL中的 index.php ,只使用'... / producer / id'等我改变了.htaccess文件中的重定向(见下文) 的工作原理是,可以从服务器发送除201-Created之外的其他标题代码。如果我尝试发送任何其他代码,它会自动变为以下代码:
HTTP/1.1 302 Found Date: Tue, 04 Dec 2012 19:42:10 GMT Server: Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1 X-Powered-By: PHP/5.3.1 Location: /producers/ Content-Length: 565 Content-Type: application/json
以下是php代码。如果我添加'!'在$ result之前,如果语句变为false,则应该发送else语句中的标头,这不会发生。同样,这个302标头被发送出去。如果我保留原样,就会发出201标题,就像它应该的那样。
为什么会这样?
PHP:
if ($result) {
header('HTTP/1.1 201 Created');
header('Location: /producers/' . $id);
}
else {
header('HTTP/1.1 500 Internal Server Error');
header('Location: /producers/' . $id
}
htaccess的:
<IfModule mod_rewrite.c>
RewriteEngine On
# Allow images and statics to be addressable
RewriteCond $1 !\.(gif|jpe?g|png|css|js)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# You have to manually change to our username or directory where our controller index is host
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
答案 0 :(得分:1)
位置:始终触发重定向,始终为3xx状态代码。
如果要输出任何其他代码,请将其附加到其他标题,并且不要发送位置:
if ($result) {
header('HTTP/1.1 201 Created', 201);
} elseif ($errors) {
header('Location: /theform.php'); // 301 by default
} else {
header('HTTP/1.1 500 Internal Server Error', 500);
}