올바른 이해와 사용 방법
PHP에서 페이지를 리다이렉트(이동)하는 가장 대표적인 방법은 header() 함수를 사용하는 것입니다.
이렇게 하면 브라우저가 다른 URL로 이동하도록 합니다.
웹 페이지에서 다른 페이지로 이동하는 방법은 사용하는 기술에 따라 다릅니다. HTML에서는 <a> 요소를 사용하면 사용자가 링크를 클릭하여 다른 페이지로 이동할 수 있으며, 자바스크립트에서는 window.location.href 등을 사용하여 현재 페이지의 URL에서 다른 URL로 이동할 수 있습니다.
반면, PHP에서는 서버 단에서 조건에 따라 사용자가 특정 URL의 페이지에 접속했을 때 header() 함수를 사용하여 페이지를 원하는 URL로 리다이렉트해 이동할 수 있습니다.
기본 예제
사용자가 https://example.com/로 접속했다고 가정합니다.
이때, 해당 페이지의 맨 위에 아래의 예제 코드를 넣으면 브라우저는 https://another-url.com/로 리다이렉트합니다.
<?php
header('Location: https://another-url.com/'); /* 브라우저는 https://another-url.com/로 리다이렉트 함 */
exit; /* 리다이렉트 시 이전 URL의 코드가 실행되지 않도록 합니다. */
위의 예제 코드에 대해 설명하겠습니다.
- 클라이언트(웹 브라우저 등)는 웹 서버에 사용자가 접속할
https://example.com/페이지를 요청합니다. - 웹 서버는 클라이언트(웹 브라우저 등)가 요청한
https://example.com/에 해당하는 리소스를 처리합니다. - 웹 서버가 해당 리소스를 PHP에 의해 처리하도록 전달하고, PHP가 스크립트를 실행하는 과정에서 맨 처음 시작하는 부분에
header('Location: https://another-url.com/')함수 호출을 발견하면, - PHP는 클라이언트(웹 브라우저 등)에게 기존
https://example.com/페이지 요청에 대해서https://another-url.com/로 지정한 URL로 리다이렉트 하게 요청하도록 웹서버에 전달합니다. 이후 PHP는 이어지는 스크립트를 계속 실행하려고 하지만,exit를 만나면 현재 스크립트의 실행을 즉시 종료합니다. - 웹 서버는 클라이언트(웹 브라우저 등)에게 기존
https://example.com/페이지를 요청에 대해서https://another-url.com/로 지정한 URL 리다이렉트하게 하는 내용도 포함해서 요청에 응답합니다. - 클라이언트(웹 브라우저 등)는 웹 서버가 응답한
https://another-url.com/로 리다이렉트 합니다.
URL을 리다이렉트하는 header() 함수
header() 함수는 매개 변수로 전달된 HTTP header를 웹 서버에 전달하여 클라이언트(웹 브라우저 등)에게 응답 헤더로 전송하도록 합니다.
구문
header() 함수의 구문
header('Location: URL');
매개변수
'Location: URL' |
지정한 URL로 리다이렉트하도록 하는 HTTP Location 헤더를 문자열로 지정합니다.
|
|---|
반환 값
header() 함수는 반환 값이 없습니다.
주의할 점
URL을 리다이렉트하는 header() 함수를 사용할 때에는 다음의 두 가지 점을 반드시 주의해야 합니다.
header()함수의 호출 위치: 맨 처음 시작하는 부분header()뒤에는exit를 사용하여 스크립트 실행을 종료
header() 함수의 호출 위치: 맨 처음 시작하는 부분
header() 함수는 웹 서버가 클라이언트(웹 브라우저 등)에게 응답 헤더를 전송하기 이전에 호출되어야 합니다. 만약 응답 헤더가 전송된 후 호출하면 경고가 발생합니다.
HTML 태그나 echo 등의 실제 출력 관련 PHP 코드, 공백, 빈 줄 등이 header() 함수 호출 전에 있으면 안 됩니다.
<!DOCTYPE html>
<html>
<body>
<?php
header('Location: https://another-url.com/');
exit;
?>
</body>
</html>
echo로 출력한 경우
<?php
echo '페이지를 준비하고 있습니다.';
header('Location: https://another-url.com/');
exit;
<?php
header('Location: https://another-url.com/');
exit;
<?php
header('Location: https://another-url.com/');
exit;
흔히 include나 require 함수 또는 다른 파일 접근 함수를 사용하는 코드에서 header() 함수가 호출되기 전에 공백이나 빈 줄이 출력되는 경우가 발생할 수 있으므로 주의해야 합니다.
header() 뒤에는 exit를 사용하여 스크립트 실행을 종료
header('Location: URL')을 호출하면 클라이언트(웹 브라우저 등)가 지정한 URL로 리다이렉트하도록 응답 헤더가 설정되지만, PHP 스크립트의 실행이 자동으로 종료되는 것은 아닙니다.
따라서 리다이렉트한 후 이어지는 코드가 실행되지 않도록 하려면 header() 함수 뒤에 exit를 사용하여 현재 스크립트의 실행을 즉시 종료해야 합니다.
<?php
header('Location: https://another-url.com/');
exit;
// 이 코드는 실행될 수 있습니다.
echo '리다이렉트 이후의 코드';
<?php
header('Location: https://another-url.com/');
exit;
// 이 코드는 실행되지 않습니다.
echo '리다이렉트 이후의 코드';