2009-07-31 16 views
4

何らかの理由により、header()を呼び出すと内部サーバーエラーが発生します。私はPHP5を使用しており、このスクリプトでmod_rewriteを広範囲に使用しています。ここでは、コード(一種の)です:PHPヘッダー()により内部サーバーエラーが発生する

<?php 

include 'core/initialize.php'; // Loads the core class (and session manager class) 

    if($_GET['reset'] == 'true') 
    { 
     $core->Session->Visits = 0; 
     header('Location', 'index.html'); 
     # header('X-Test', 'wtf'); // causes the error too :(
    } 
    if(isset($core->Session->Visits)) $core->Session->Vists += 1; 
    else $core->Session->Visits = 0; 
    echo "Previous Visits: {$core->Session->Visits} (<a href='index.html?reset=true'>Reset</a>)"; 
?> 

は私の.htaccessファイルは、次のようになります。

# Start up the rewrite engine 
Options +FollowSymLinks 
RewriteEngine on 

RewriteRule ^(.*)$ navigator.php?nav=$1&%{QUERY_STRING} [NC] 

答えて

9

あなたはこれを使用している:

header('Location', 'index.html'); 

それは仕方header必須ではありません2番目のパラメータはブール値でなければなりません。

最初のヘッダーはヘッダー名+値である必要があります。

だから、あなたのケースでは、このような何か:

header('Location: index.html'); 

一つのパラメータのみ。そして名+ ':' ヘッダ:

第2の特殊ケースは "場所" は+値:-)

は、ドキュメントの例があります。 このヘッダーをブラウザに戻すだけでなく、 3xxのステータスコードが既に設定されていない限り、ブラウザにステータスコードLEDIRECT(302) を返します。追記として

<?php 
header("Location: http://www.example.com/"); /* Redirect browser */ 

/* Make sure that code below does not get executed when we redirect. */ 
exit; 
?> 


私の記憶が正しければLocationヘッダーを使用しているとき、あなたはFULL絶対URLを使用する必要があります。私は、相対URLを使用して(ほぼ?)すべてのブラウザで動作することを知っていますが、正しくリコールすれば、HTTP RFCを読むときは無効です。 「内部サーバーエラー」は、あなたのPHPを示している可能性がありますこと:二追記(はい、答えはすでに受理されていますが、多分それは次回の:-)のために、とにかく便利になるでしょう)として


スクリプトに何らかのエラーが発生しました。その場合

、あなたは...
error_logのファイルをチェック...や物事を容易にするために、error_reportingdisplay_errorsを活性化させる必要があります - 少なくとも、あなたの開発マシン上で。

+0

私は今、かなりダムを感じています。ありがとう –

+0

@Chris T - あまり心配しないでください。遅かれ早かれ、すべての優れたプログラマーは、あいまいなものを見ることの価格が時には明白なことを見逃すことになることを発見する。 ;-) –

+0

@Chris:心配しないでください。他の誰かが私たちのコードを見ていることが分かっているのは本当に助かります。(btw、error_logに関する別の情報を与えるために私の答えを編集しました) –

関連する問題