停止.htaccess发送重定向(302)标头

时间:2012-12-04 19:48:42

标签: php .htaccess redirect curl http-headers

我正在创建一个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>

1 个答案:

答案 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);
}