2011-03-13 7 views
1

사용자 지정 콘텐츠 관리 스크립트를 개발 중이며 페이지 리디렉션 작업을하고 있습니다.변수 설정 및 header() 사용

아래 코드는 데이터베이스의 특정 페이지 ID에 대한 URL 코드와 URL 코드를 비교하며 두 URL이 동일하지 않은 경우 사용자가 리디렉션됩니다.

그러나 변수를 추가하여 페이지가 리디렉션되었는지 여부를 확인할 수 있습니다. 작동하지 않습니다.

if (isset ($_GET ['id']) && $rawdata) { 
     if ($_SERVER ["REQUEST_URI"] != $rawdata ['htmltitle']) { 
      header ("HTTP/1.1 301 Moved Permanently"); 
      header ("Location: http://${_SERVER['SERVER_NAME']}:${_SERVER["SERVER_PORT"]}${rawdata['htmltitle']}"); 
      $redirected = true; 
      ; 
     } 
    } 

if ($redirected == true) { 
      print_redirect_nonexpected(); 
     } 

function print_redirect_nonexpected(){ 
echo "<!-- REDIRECTED _ NOT _ EXPECTED ? -->"; 
} 

기능이 실행되지 않으므로 에코가 없습니다. 내가 여기서 잘못하고있는 아이디어가 있습니까?

답변

1

사용이 : $ RAWDATA [ 'htmltitle는'] 페이지의 전체 URL 인 경우

header ("Location: http://".$_SERVER['SERVER_NAME'].$_SERVER['SERVER_PORT'].$rawdata['htmltitle']); 

는이를 사용 die()를 추가도

header ("Location: http://".$rawdata['htmltitle']); 

그리고 header() 후이 좋다.

+0

아니, 작동하지 않습니다. htmltitle이라고도합니다. – bear

+0

오, 무슨 실수 야. 내 업데이 트를 봐. – Kemal

-1

위치 헤더가 전송되면 브라우저는 현재 작업을 중단하고 리디렉션 된 위치에서 페이지를 가져옵니다. 즉, 모든 의도와 목적을 위해 위치 ('header : example.com')는 본질적으로 die()와 동일한 효과를 갖습니다. 출력 버퍼링을 사용하여이 동작을 재정의하거나, 스크립트에서 header() 호출을 아래쪽으로 이동하여 이동할 수 있습니다. 그러나 print_redirect_unexpected 호출 후에는 브라우저로 출력을 보내면 모든 헤더가 전송되어 더 이상 보낼 수 없으므로 print_redirect_unexpected 호출 이후로 이동할 수 없습니다.

기본적으로 출력 버퍼링을 켜야합니다.

+0

-1 :'header ('Location :')'는 활성 스크립트를 죽이지 않습니다. 그러나 스크립트의 출력을 볼 수 없게됩니다. 권한이없는 사용자가 원하지 않는'DELETE '를 만들지 않도록 막을 때 중요한 뉘앙스. –

+0

나는 "본질적으로"말했습니다. 스크립트가 계속 실행되는 것은 사실이지만 스크립트의 결과는 절대 볼 수 없으므로 스크립트가 파일 시스템/데이터베이스 변경을 일으키지 않으면 효과는 die()와 거의 동일합니다. – GordonM

+0

그렇지 않으면 매우 중요합니다. –

1

Location: 헤더를 보내면 사용자 에이전트가 현재 페이지로드를 중지하고로드 할 페이지를로드하므로 출력이 표시되지 않습니다.

그러나 코드는 *은 백그라운드에서 실행을 계속 할 수 있으므로 일반적으로는 원치 않는 동작을 방지하기 위해 header()exit;에 따르십시오.

* 서버 구성 및 ignore_user_abort에 따라 다릅니다.

또한 header("Location: /{$rawdata['htmltitle']}");이면 충분합니다. 동일한 서버로 리디렉션 중이므로 절대 경로로 충분합니다. $_SERVER 변수를 사용하여 리디렉션을 아무렇게나 복잡하게 작성하지 마십시오.

+0

그럼이 상황을 어떻게 처리하겠습니까? – bear

+0

@Shamil : 리디렉션 URL 내의 GET 변수로 상태 정보를 전달하거나'$ _SESSION' 변수를 사용하십시오. –

+0

GET을 추가하려고 시도했지만 리디렉션이 실패했습니다. – bear