0

*.example.com のワイルドカード証明書を持っています。Apache で *.example.com の仮想ホストをセットアップしました (HTTPS トラフィックと非 HTTPS トラフィックの両方)。

いくつかの 404 応答ヘッダーをいじっていますが、問題があるようです。そのため、簡単なテスト ケースを作成しました。

仮想ホストで、すべてのトラフィックを index.php に書き換えます。

RewriteRule .* /index.php [QSA]

そしてindex.php、404 ヘッダーを返します。

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
exit();

それ以外はやっていないので、ErrorDocumentセットなどはありません。

サーバーから返されたヘッダーのダンプ (ユーザーfile_get_contents("https://test.example.com");およびprint_r($http_response_header);別の PHP ファイルから:

Array
(
    [0] => HTTP/1.0 404 Not Found
    [1] => Date: Mon, 08 Oct 2012 12:41:28 GMT
    [2] => Server: Apache/2.2.16 (Debian)
    [3] => X-Powered-By: PHP/5.3.3-7+squeeze14
    [4] => Vary: Accept-Encoding
    [5] => Content-Length: 57
    [6] => Connection: close
    [7] => Content-Type: text/html
)

次に、任意のサブドメイン/任意のパスで HTTP サイトに入ると、ブラウザはデフォルトの見つからないページを正しく表示しますが、HTTPS を使用すると、ブラウザは代わりに空白のページを表示します (正しく (?) 表示しない IE を除く)ページが見つかりました)。

header("Status: 404 Not Found");どちらも機能しません。

これは正しくありませんよね?ここに欠けているものはありますか? 404 ヘッダーとワイルドカード証明書に関する何らかの制限がありますか?

ハクレのリクエストによるアップデート

からダンプされたヘッダーheaders_list():

Array
(
    [0] => X-Powered-By: PHP/5.3.3-7+squeeze14
)

次のようなヘッダーの書き込み方法を使用しても、サーバーは 404 ヘッダーの追加を完全に無視しているようです。

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
header("HTTP/1.0 404 Not Found");
header("HTTP/1.1 404 Not Found");

などの他のヘッダーheader("Expires: Sat, 26 Jul 1997 05:00:00 GMT");は正常に動作します。

4

1 に答える 1

0

これは間違っています:

header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");

HTTPS を使用している場合でも、以下を返す必要があります。

header("HTTP/1.1 404 Not Found");
于 2012-10-08T11:32:17.940 に答える