2009-10-15 7 views
10

PHP에서 모든 기록/캐시를 완전히 삭제하는 페이지를 다시로드하거나 리디렉션하는 가장 좋은 방법은 무엇입니까? 어떤 헤더를 사용해야합니까? 어떻게됩니까가장 좋은 방법은 PHP에서 페이지를 리디렉션/다시로드

:

를 링크를 클릭에는 얻을 - 매개 변수가 설정되고 스크립트가 실행됩니다. 작업이 끝나면 get-parameters없이 페이지를 리디렉션하고 다시로드하려고합니다. 처음에는 아무 일도 없었지만 F5 키를 누르면 변경 사항이 나타납니다.

내가 원하는 것은 :

리디렉션 및 다시로드 그래서 변화는 F5 키를 눌러없이 나타납니다.

+0

자세한 내용이 필요합니다. 어떤 페이지가 역사에서 나타나지 않기를 원하나요? 귀하가 전화 한 사람 또는 귀하가 리디렉션하고있는 사람? 캐시에서도 마찬가지입니다. –

답변

3

이 시도 :

echo '<script>document.location.replace("someurl.php");</script>'; 

이 브라우저 기록하지만 캐시를 교체해야합니다.

7

페이지를 다시로드하고 강제로 캐시에서 가져 오지 않는 가장 좋은 방법은 무작위 ID 또는 타임 스탬프를 쿼리 문자열로 URL 끝에 추가하는 것입니다. 매번 요청을 고유하게 만듭니다.

+0

가장 좋은 방법 일 수 있습니다. 이렇게하는 것이 이상합니다. 상상해보기 : www.google.com.br?randomId=12381289371 가장 적합한 방법은 적절한 헤더를 보내야합니다. – Ismael

1
header('Location: http://example.com/path/to/file'); 
26
header('Location: http://www.example.com/', true, 302); 
exit; 

참조 : http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

편집 :

이 응답은 캐시 경우는 Cache-Control 또는 expires 헤더 필드입니다.

+1

302가 맞습니다. 축하해. – Cesar

+0

이것은 내가 필요한 것인데, 나는이 질문과 완전히 다른 것을하고 있었지만 그 대답은 컸다. – Jake

+0

사용하는 것이 더 좋다 : header ("Cache-Control : no-cache"); header ('위치 : http : //www.example.com/', true, 302); exit; –

0

가장 안전한 방법은 다른 출력이 브라우저로 전송되기 전에 보낼 수 있는지, 머리글 리디렉션

header('Location: http://www.example.com/', true, 302); 
exit; 

를 사용하지만 조심하는 것입니다.

24
function redirect($url) { 
    if(!headers_sent()) { 
     //If headers not sent yet... then do php redirect 
     header('Location: '.$url); 
     exit; 
    } else { 
     //If headers are sent... do javascript redirect... if javascript disabled, do html redirect. 
     echo '<script type="text/javascript">'; 
     echo 'window.location.href="'.$url.'";'; 
     echo '</script>'; 
     echo '<noscript>'; 
     echo '<meta http-equiv="refresh" content="0;url='.$url.'" />'; 
     echo '</noscript>'; 
     exit; 
    } 
} 

// How to use 
$url = "www.google.com"; 
redirect($url); 
+0

감사합니다.이 답변은 @Phill입니다. 이 기능으로 많은 시간을 절약 할 수있었습니다. –

+0

흠. 코더는 특정 상황에서 사용할 유형을 리디렉션 할 유형을 결정해야하며 해당 기능을 선택하지 않아야한다고 생각합니다. 예 : 'location'을 통해 HTTP 요청을 원할 경우, 헤더를 보내지 않고 헤더가 아직 보내지지 않았는지 확인해야합니다. 그것이 적어도 내가 생각하는 방법이다. – Kos

1

단지 SEO와 관련된 정보에 대해 :

(301)가 인덱스에 URL을 대체하기 위해 검색 엔진을 말할 것. 따라서 url1이 301로 url2로 리디렉션되면 모든 주요 검색 엔진 [google, yahoo + bing]이 url1을 url2로 바꿉니다.

302는 다른 방식으로 작동합니다. 그것은 다른 주소에있는 URL이 temporarily이라고 말합니다.

see this post

관련 문제