취업/CodeIgniter

[ci4] HTTP_REFERER 리다이렉션 오류

카슈밀 2022. 9. 19. 14:43
반응형

다국어 SEO를 최적화 중인데, 한글로 검색된 페이지가 유난히 이상하게 구글홈페이지로 날라가는 버그가 발생했다.

 

현재 HTTP_REFERER를 통해서 이전 페이지 유무를 감지해서 이전페이지로 날려보내고 있었는데,

이상하게 구글만 원래 구글 홈으로 날려가더라.

 

개발자 도구를 통해 네트워크를 검색해보니

사이트 도메인으로 날라가는데, 그 후 구글 홈을 호출하더라.

이거 리다이렉션 오류구나 싶던...신기하게 도메인을 직접 치는건 정상 작동.

 

찾아보니 3가지의 HTTP_REFERER가 추출하는 방식을 알게되었다.

1. 주소창에 주소 입력. HTTP_REFERER 없음

2. 즐겨찾기의 경우. HTTP_REFERER 없음

3. 링크를 통한 접속. HTTP_REFERER 있음.

3번의 경우만 오류가 발생하는 것이었다.(당연히 이전페이지가 있으니 이전페이지로 날려보내던 것...)

https://3dmpengines.tistory.com/1897

 

방문전 사이트 HTTP_REFERER

HTTP Referer는 HTTP 헤더값으로서 웹 브라우저에서 생성하는 데이터입니다. http referer : 현재 페이지로 오기 전의페이지주소값이 담겨있는 환경변수 HTTP 환경변수의 HTTP_REFERER를 이용해서 어느정도

3dmpengines.tistory.com

 

해당의 오류를 잡기 위해서 도메인을 검증하는 방식을 추가했다.

기본 도메인을 아예 동적으로 가져오고,

아예 HTTP_REFERER가 없으면 1차로 걸러내고 있다면, 해당 Host 주소와 웹페이지 host를 비교하여

맞으면 이전페이지로.

아니면 메인페이지로 날려보내는 방식으로 추가했다.

$url = base_url();
if(!isset($_SERVER['HTTP_REFERER'])) {
    return redirect()->to($url);
} else {
    $userUrl = parse_url($_SERVER['HTTP_REFERER'])['host'];
 	$domainHost = parse_url($url)['host'];
    if($userUrl == $domainHost) {
        return redirect()->to($_SERVER['HTTP_REFERER']);
    } else {
        return redirect()->to($url);
    }
}
728x90