본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP header Location — 페이지 리다이렉트 완전 정리

by 왕진 2026. 6. 16.
반응형

 

 

Web Development · PHP header Location

PHP header("Location:...") —
다른 URL로 자동 이동

로그인 후 마이페이지로, 처리 완료 후 목록 페이지로
시작 오늘 분석할 코드
<?php header("Location:http://www.naver.com/"); // 브라우저에 "이 주소로 이동하라"는 응답 헤더 전송 exit; ?>

이 코드를 실행하는 순간 브라우저는 네이버로 자동 이동한다. 사용자에게는 PHP 페이지가 보이지도 않는다.

용어 용어 정리
header()HTTP 응답 헤더를 보내는 함수
Location"이 URL로 이동하라"는 헤더
리다이렉트자동 페이지 이동
exit / die스크립트 즉시 종료
302 (기본)임시 이동 — 검색엔진 인덱스 유지
301영구 이동 — 검색엔진이 새 주소로 갱신
출력 전 호출한 글자라도 출력했으면 실패
실무로그인 후 이동, 폼 제출 후 이동

1 exit는 왜 필요한가?

header를 호출해도 PHP는 그 아래 코드를 계속 실행한다. 이걸 막지 않으면 의도치 않은 처리가 일어날 수 있다.

if (!$loggedIn) { header("Location: login.php"); // exit가 없으면 ↓ deleteUserAccount(); // 비로그인 상태인데 실행됨! exit; // 여기로 와도 늦음 } // 안전한 패턴 if (!$loggedIn) { header("Location: login.php"); exit; } deleteUserAccount();

2 "headers already sent" 오류
headerHTML이 한 글자라도 출력되기 전에 호출해야 한다. echo·print는 물론, PHP 시작 태그 앞의 빈 줄도 출력으로 간주된다.
// 잘못된 예 <html> <?php header("Location: ..."); // 이미 <html> 출력됨 → 오류 ?> // 올바른 예 <?php header("Location: ..."); exit; ?>

3 301 영구 vs 302 임시
// 임시 이동 (기본) header("Location: /new", true, 302); // 영구 이동 (검색엔진에 새 주소 알림) header("Location: /new", true, 301);

 

반응형

 

4 활용 시나리오
// 1. 로그인 후 마이페이지로 $_SESSION['user'] = $user; header("Location: /mypage.php"); exit; // 2. 폼 제출 후 새로고침 방지 (PRG 패턴) saveData($_POST); header("Location: /thanks.php"); exit; // 3. 권한 없으면 로그인 페이지로 if (!isLoggedIn()) { header("Location: /login.php"); exit; }

5 자주 하는 실수
· exit 빼먹음 → 아래 코드도 실행
· 출력 후 호출 → "headers already sent"
· 사용자 입력을 그대로 Location에 → 오픈 리다이렉트 취약점
· 같은 페이지로 무한 리다이렉트 (조건문 함정)

핵심 한 줄 요약

header("Location:...")브라우저에 이동 지시
exit;반드시 함께 — 아래 코드 차단
출력 전 호출echo/HTML 한 글자도 안 됨
302 / 301임시 / 영구 이동
PRG 패턴POST → Redirect → GET (새로고침 방지)
활용로그인 후, 폼 제출 후, 권한 없을 때
보안사용자 입력을 URL에 그대로 X
반응형

댓글