2013-04-30 3 views
0

누군가이 코드를 조사 할 수 있습니까? 나는이 경우를 구분하지 않기 위해 /i을 사용할 수 있다는 것을 알고있다. 그러나, 비록 내가 아니지만, 나는 여전히 $ user_agent 세트를 확실히 가지고있는 방문자를 얻고있다. 그러나 이것을 빠져 나와 나는 왜 firgure를 기울인다. 첫 번째 header() 호출 후분할 preg_match 또는 다른 것

<?php 
$user = $_SERVER['HTTP_USER_AGENT']; 
if(preg_match("/android|linux|windows|Android|Linux|Windows/",$user)) { 
header("Refresh:0;url=http://site.com/page.php/"); 
}; 
?> 

<?php 
$referrer = $_SERVER['HTTP_REFERER']; 
if(preg_match("/term-one|term-two|term-three/",$referrer)) { 
header("Refresh:0;url=http://site.com/page.php/"); 
exit; 
} 
?> 
+0

을 받고 있다면, 왜 자신의 사용자 에이전트 또는 리퍼러가 무엇인지 반향 끝에 일부 로깅을 추가하지? – andrewsi

+0

멍청한 질문이지만 USER_AGENT 세트가 있다고 확신하는 경우 3 개의 일치 항목 중 하나가 값에 포함되어 있는지도 확인하십시오. – fullybaked

+0

사용자 에이전트를 스푸핑하기 쉽습니다. 일부 사용자가 건너 뛴 이유일까요? – HamZa

답변

0

당신은 exit; 문을 놓치고있어. 여전히 작동하는 것처럼 보이지만 코드가 계속 실행되고 나중에 코드에서 Refresh 헤더를 다시 설정하면 첫 번째 리디렉션이 발생하지 않습니다.

또한 페이지 로딩이 완료된 후 새로 고침이 발생하므로 누락 된 exit은 콘텐츠를로드하는 것을 의미합니다 (Google 애널리틱스 코드 포함). 결국 페이지가 오른쪽 페이지로 새로 고침 되더라도 이 페이지를 먼저로드 한 것으로 Google 애널리틱스에서 기록합니다.

우연히 왜 리디렉션에 Location 헤더 대신 Refresh 헤더를 사용하고 있습니까?

내 추천 코드는 다음과 같습니다 일들이 잡힐해야 당신의 정규 표현식 과거

<?php 
    $user = $_SERVER['HTTP_USER_AGENT']; 
    if (preg_match("/android|linux|windows/i", $user)) { 
     header("Location: http://site.com/page.php"); 
     exit; 
    } 
    $referrer = $_SERVER['HTTP_REFERER']; 
    if (preg_match("/term-one|term-two|term-three/", $referrer)) { 
     header("Location: http://site.com/page.php"); 
     exit; 
    } 
?> 
관련 문제