2009-07-31 5 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해야되지 여기에 (일종의) 코드입니다 두 번째 매개 변수는 부울이어야합니다.

AND 첫 번째 헤더 이름 + 값이어야합니다.

그래서 이런, 귀하의 경우, 뭔가 :

header('Location: index.html'); 

하나 개의 매개 변수; 이름 + ':'헤더 :

두 번째 특별한 경우가 "위치"입니다 + 값 :-)

이 문서의 예제가있다. 이 헤더를 다시 보낼뿐만 아니라 3xx 상태 코드가 이미 설정되어 있지 않으면 REDIRECT (302) 상태 코드를 브라우저에 반환합니다. 내 기억이 맞다 경우 Location 헤더를 사용하는 경우

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

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


(!) 참고로, 당신은 FULL 절대 URL을 사용한다; 상대 URL을 사용하는 것이 모든 브라우저에서 (거의?) 작동한다는 것을 알고 있지만, 올바르게 호출하면 HTTP RFC를 읽을 때 유효하지 않습니다. "내부 서버 오류"당신의 PHP를 나타낼 수 있음을 : 두 번째 (!) 참고 (예, 대답은 이미 승인되었지만 어쩌면 다음 시간 :-) 위해, 어쨌든 도움이 될 것이다)으로


스크립트에서 오류가 발생했습니다. 이 경우

, 당신은 ...
error_log의 파일을 확인 ... 또는 물건을 촉진하기 위해 error_reportingdisplay_errors를 활성화해야 - 적어도 개발 컴퓨터에.

+0

지금은 꽤 바보 같아요. 감사합니다 –

+0

@Chris T - 그것에 대해 너무 걱정하지 마십시오. 조만간 모든 유능한 프로그래머들은 애매한 것을 보는 것의 가격이 때때로 명백한 것을 놓치는 것임을 알게됩니다. ;-) –

+0

@Chris : 걱정하지 마세요. 나는 누군가가 우리의 코드를 보면서 정말로 도움이 될 수 있음을 안다. 때때로 :-) (btw, error_log에 대한 다른 정보를주기 위해 나의 대답을 편집했다.) –

관련 문제