これはlaravelが原因ではありません。これを再現するには(Windowsではphp 5.4):
<?php
header("HTTP/1.1 401 Unauthorized");
header("Location: http://www.google.com");
PHPが302に設定しているようです:
$ php-cgi "test.php"
Status: 302 Moved Temporarily
Location: http://www.google.com
Content-type: text/html; charset=UTF-8
PHP ソース コードの main/SAPI.C:
} else if (!STRCASECMP(header_line, "Location")) {
if ((SG(sapi_headers).http_response_code < 300 ||
SG(sapi_headers).http_response_code > 307) &&
SG(sapi_headers).http_response_code != 201) {
/* Return a Found Redirect if one is not already specified */
if (http_response_code) { /* user specified redirect code */
sapi_update_response_code(http_response_code TSRMLS_CC);
} else if (SG(request_info).proto_num > 1000 &&
SG(request_info).request_method &&
strcmp(SG(request_info).request_method, "HEAD") &&
strcmp(SG(request_info).request_method, "GET")) {
sapi_update_response_code(303 TSRMLS_CC);
} else {
sapi_update_response_code(302 TSRMLS_CC);
}
}
ご覧のとおり、 を使用するheader()
と"Location"
、http ステータス コードが 302 に変更されます。
逆の方法で実行すると、機能させることができます。
<?php
header("Location: http://www.google.com");
header("HTTP/1.1 401 Unauthorized");
これにより、次のようになります。
$ php-cgi "test.php"
Status: 401 Unauthorized
Location: http://www.google.com
Content-type: text/html; charset=UTF-8
しかし、laravelはステータスを設定した後に場所を設定するため、ステータスはとにかく302に戻されます。しかし、これは論点です。ロケーション ヘッダーでステータスを 401 に正常に設定したとしても、ブラウザはリダイレクトをたどりません。