2014-04-14 3 views
0

나는 Wordpress 기반 웹 사이트의 웹 마스터이며 최근에 Wordpress 테마의 index.php 파일 맨 위에 몇 가지 코드를 추가했습니다. 웹 사이트가로드 될 때 실행되는이 코드는 URL이 www.website.com/index.php?website=random 인 경우 1,000 개의 웹 사이트 중 하나로 리디렉션됩니다.내 Wordpress 페이지에 PHP 리디렉션 스크립트가 추가되었습니다. 일부 컴퓨터에서는 작동하지만 다른 컴퓨터에서는 작동하지 않습니다. 무슨 일이야?

다음과 같이 PHP는 (단순 목적으로 5 링크를 넣어)된다

<?php 

    $random_vid = array('http://www.URL1.com', 
         'http://www.URL2.com', 
         'http://www.URL3.com', 
         'http://www.URL4.com', 
         'http://www.URL5.com' 
         ); 

    if ($_GET['website'] == "random") { 
     $key = time() % count($random_vid); 
     header('Location: ' . $random_vid[$key]); 
    } 

?> 

문제이 스크립트는 일부 컴퓨터에서 잘 작동 (의도 한대로 임의의 사이트로 리디렉션),하지만 다른 작동하지 않는다는 것입니다 . 작동하지 않는 경우 www.website.com/?website=random을 클릭하면 사람들을 동일한 웹 사이트로 무한대로 리디렉션합니다 (링크를 몇 번 클릭했는지 상관없이 항상 URL1.com으로 리디렉션 됨).).

Wordpress, 개별 브라우저 또는 코드에 문제가 있는지 잘 모르겠습니다. 솔직히, 나는 혼란스럽고 무엇을해야할지 모르겠다. 누가 무슨 일이 벌어지고 있는지에 대한 통찰력을 얻을 수 있습니까?

+0

헤더()가 실제로 작동하는 것과 같은 기본 디버깅이 완료되었습니다 (예 : '헤더가 이미 전송되었습니다'라는 숨겨진 '숨겨진'헤더가 없습니다.)? –

+1

나는 그들이 리다이렉트를 캐싱하고 있다고 생각할 것이다. 크롬은 그것에 대해 상당히 공격적입니다. – ceejayoz

+0

@ceejayoz는 올바른 생각을 가지고 있습니다. 아래 내 대답을 참조하십시오. – tgies

답변

-1

위치에 인수를 추가해보십시오. 캐시가 유지되지 않을 수도 있습니다.

header('Location: ' . $random_vid[$key] . '?t=' . time()); 
+0

좋은 생각은 간단하고 눈에 띄지 않습니다 – EasyBB

+1

이것은 대개 대상 페이지 *가 어느 정도 캐시되지 못하도록하지만 리디렉션 자체가 처음부터 캐시되지 않도록하지는 않습니다! 문제는 매번 바뀌는'Location :'응답을 얻지 못하고있다. 이미 그렇게하고있다. 문제는 브라우저가 매번 그것을 실제로 보게하는 것입니다. – tgies

+0

아, 좋은 지적이야. 이 경우 브라우저가 동적이라고 생각할 수 있도록 리디렉션 페이지에 인수를 지정할 수 있습니다. 즉, index.php를 리다이렉트로 만드는 대신 index.php가 'redirect.php? k ='로 리디렉션되도록 할 수 있습니다. $ random_vid [$ key]는 $ k로 리디렉션됩니다. 또는 더 간단하다면, 단지 Pragma : no-cache 헤더 (또는 이와 동등한 메타 태그)를 index.php에 넣고 캐시되지 않도록하십시오. –

2

웹 브라우저 cache redirects. 브라우저에 Location : 헤더를 보내면 마지막으로 응답 한 시간이 http://www.website.com/index.php?website=random 일 때 일정 기간 동안 기억하므로 요청을 건너 뛰고 마지막으로 보낸 리디렉션을 따르게됩니다.

이상적으로는, 301 Moved Permanently 리디렉션 및 302 Moved Temporarily 리디렉션가, PHP는 당신이 Location 헤더를 설정할 때 다른 말하지 않는 한 (302)을 전송하고, 302S aren't meant to be cached하지만, 특정 상황 및 특정 버전에서 Chrome does appear to cache 302 responses. 당신이 가장 가능성이 여전히 선택을 취소해야합니다, 이러한 변경 한 후

<?php 

    $random_vid = array('http://www.URL1.com', 
         'http://www.URL2.com', 
         'http://www.URL3.com', 
         'http://www.URL4.com', 
         'http://www.URL5.com' 
         ); 

    if ($_GET['website'] == "random") { 
     $key = time() % count($random_vid); 
     header("Cache-Control: no-cache, must-revalidate"); 
     header("Pragma: no-cache"); 
     header("Expires: Sat, 20 Apr 2000 05:00:00 GMT"); 
     header('Location: ' . $random_vid[$key], true, 302); 
    } 

?> 

:

가장 좋은 방법은 302 리디렉션을 전송하고 응답을 캐시하지 않도록 명시 적으로 브라우저를 지시하고 있는지 확인하는 것입니다 영향을받은 브라우저의 캐시를 테스트하여 새로운 헤더를 사용할 수있게합니다.

+0

또 다른 옵션은'http : //example.com/? website = random' 링크를'http://example.com/?website=random&random='로 대체하는 것이므로 매번 다른 URL을 사용합니다. – ceejayoz

관련 문제