0

私は API を作成しており、外部クライアントで CRUD 機能をテストしています。

URL でindex.phpをスキップし、「.../producer/id」などのみを使用できるようにするために、.htaccess ファイル(以下を参照)でリダイレクトを変更しました。これは、201 以外のヘッダー コードがないという事実を受け入れます。 - 作成したものをサーバーから送信できます。他のコードを送信しようとすると、自動的に次のコードになります。

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>
4

1 に答える 1

1

Location: 常にリダイレクトをトリガーします。これは常に 3xx ステータス コードです。

他のコードを出力する場合は、それを他のヘッダーに追加し、Location を送信しないでください。

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);
}
于 2012-12-04T21:10:58.317 に答える