2014-01-17 2 views
0

$_SERVER['HTTP_HOST']이 동일한 값인 $C['ST__URL']을 반환하는지 확인하는 간단한 문이 있습니다. 그렇지 않으면 301 리디렉션을 수행합니다. $_SERVER['HTTP_HOST']$C['ST__URL'] 변수와 일치하지 않기 때문에 오늘 시스템 가동이 중단되었습니다.

중단 시간은 강제적 인 301 리디렉션이 연속 루프로 떨어지는 원인으로 인해 $_SERVER['HTTP_HOST']이 인식되지 않아야합니다.

$C['ST__URL']이 올바르게 채워 졌기 때문에 어느 것이 다운 타임의 원인이 될 수 있는지 궁금합니다. 아파치 일시적인 문제? DNS 영역의 다른 구성은 무엇입니까?

$url = parse_url($C['ST__URL']); 

    if($_SERVER['HTTP_HOST']!=$url['host']) { 
     header('HTTP/1.1 301 Moved Permanently'); 
     header('Location: '.$C['ST__URL'].$_SERVER['REQUEST_URI']); 
    } 
+1

각 변수에 포함 된 내용을보기 위해 var_dump를 시도 했습니까? –

+0

클라이언트가 요청과 함께 호스트 이름을 보내지 않고 IP를 통해 서버에 도달하면 HTTP_HOST를 얻지 못할 것입니다. 당신이 말하는 "중단 시간"에 관해서는, 정확히 당신이 그것을 의미합니까? "정상적인"HTTP 클라이언트는 요청을 취소하기 전에 일정한 수의 리디렉션을 따르기 만합니다. 호스트 헤더를 보내지 않은 단일 클라이언트가 (특정 특수 조건을 언급하지 않는 한) "가동 중지 시간"을 초래할 수있는 방법을 알지 못합니다. – CBroe

+0

당신은 기본적으로 말하고 있습니다 : 나는 무슨 일이 일어 났는지 전혀 모른다. 다시는 일어나지 않도록 어떻게 만들 수 있는가? 먼저 무엇이 발생하는지 파악한 다음 수정하십시오. 또한 : 당신은 왜 이것을 필요로 할 것입니까? 당신이 시연했듯이, 이것은 무작위로 주위에 가지고 위험한 코드입니다. 필요한 경우 머리글 제공 (st__URL을 채우는 순간?). – Nanne

답변

0

먼저 아파치 요청 로그를 확인합니다.

당신은 "이유는 $ _SERVER [ 'HTTP_HOST']이 (가) 인식되지 않아야합니다."라고 말하지만 실제로 전혀 모른다는 말입니까? 왜 안돼? 당신은 그것에 대한 기록이 없습니다.

단지 샘플 메시지입니다
if($_SERVER['HTTP_HOST']!=$url['host']) { 

    error_log("Invoking redirect: server host $_SERVER['HTTP_HOST'] mismatch with url $url.\r\n"),3,"/var/log/http301redirect.log"); 

    header('HTTP/1.1 301 Moved Permanently'); 
    header('Location: '.$C['ST__URL'].$_SERVER['REQUEST_URI']); 
} 

, 당신이 날짜를 표시하고 로그 메시지를 사용자 정의 할 것입니다 : 지금 당신이 알고있는이 그것을 다시는 일어나지해야 로그인하도록 설정하는 문제이다.

관련 문제