현재 페이지가 변경되었거나 더 이상 사용하지 않을 경우 다른 URL로 리다이렉트(Redirect)하고 싶은 경우가 있습니다. 리다이렉트는 서버 응용프로그램의 규칙을 사용하는 방법, 자바스크립트를 사용한 방법, 메타 태그(Meta)를 사용한 방법, 그리고 응답 헤더(Response Header)를 사용하는 방법이 있습니다.
이러한 다양한 방법 중 PHP 코드로 응답 헤더를 보내 리다이렉트를 처리하게 되면 좀 더 간단하고 효율적인 코드가 됩니다. PHP로 리다이렉트를 처리하는 방법은 다음과 같습니다.
<?php header("Location: https://jootc.com"); ?>
이렇게 하면 입력한 URL로 이동이 될 것입니다. 그러나 간혹 이런 코드를 사용해도 페이지 이동이 처리되지 않는 경우가 있습니다.
이럴 때는 다음의 원인에 해당하는지 확인해보실 필요가 있습니다.
Location 헤더를 넣을 때는 페이지 내에 출력되는 데이터가 없어야 합니다. PHP include()
함수를 통해 HTML 엘리먼트가 출력되었거나, 임의의 텍스트가 print되면 리다이렉트가 처리되지 않을 수 있습니다.
예를 들면 다음과 같습니다. 다음 코드를 실행하면 리다이렉션이 진행되지 않습니다.
<?php header("Location: https://jootc.com"); ?> <!DOCTYPE html> <html lang="ko"> <head> <title>Test page</title> </head> <body> <h1>Hello, World!</h1> </body> </html>
이제 이 문제를 해결해보겠습니다. 해결 방법은 간단합니다. header 함수를 최상단에 넣고, 하단에 exit();
함수를 실행합니다.
<?php header("Location: https://jootc.com"); exit(); ?> <!DOCTYPE html> <html lang="ko"> <head> <title>Test page</title> </head> <body> <h1>Hello, World!</h1> </body> </html>
이렇게 하면 exit()
함수 하단에 어떠한 출력문이 있어도 이를 무시하게 되므로 리다이렉트에 문제가 발생하지 않을 것입니다. (즉, 하단의 작업 내용을 유지한 채로 링크 이동을 처리할 수 있습니다.)
또 다른 방법은 header 대신 Javascript script 태그를 사용하여 리다이렉트를 처리하는 방법입니다. location.href
또는 location.replace
와 같은 함수를 사용하면 되는데, HTML 코드 내에 삽입하지 않고 PHP 코드 상단에서 실행할 수도 있습니다. 아래와 같이 echo 함수를 사용하여 Script 태그를 불러오게 하면 됩니다.
<?php echo "<script>window.location.href='https://jootc.com';</script>"; ?>
이렇게 하면 echo 함수 상단에 출력되는 내용이 있어도 별다른 오류 없이 리다이렉트가 처리될 것입니다. 물론 리다이렉션에 시간이 걸린다면 출력되는 내용이 사용자에게 잠시 보일 수 있습니다. 가능하면 이 방법 보다는 PHP의 header 함수를 사용하는 것을 권장합니다.
참고 자료
- header location not working in my php code: https://stackoverflow.com/questions/12525251/header-location-not-working-in-my-php-code