2011-11-22 5 views
0

양식이 있습니다. 양식을 작성하고 사용자가 제출 버튼을 클릭하면 사용자는 감사 페이지로 이동합니다. 감사 페이지에서 사용자가 자신의 홈페이지로 이동하는 링크 (앵커 태그)입니다. 그것은 20 번 중 19 번 작동합니다.PHP 스크립트를 건너 뛰고 앵커 태그를 클릭하십시오

문제는 때때로 PHP가 감사 페이지를 건너 뛰고 직접 홈페이지로 이동한다는 것입니다. 이것이 어떻게 가능한지? PHP는 어떻게 링크를 클릭합니까? 코드를 살펴 보았고 완전히 정확합니다. 아니 자바 스크립트, 그냥 HTML과 CSS가 없습니다.

내가 말했듯이, 매번 그렇게하지는 않습니다. 나는 그것이 벌어지고 있는지 이해하고 싶어하는 입찰 거래가 아니라고 생각합니다. 리디렉션과 같은 간단한 헤더를 사용하고 있습니다.

$url = "thanks/"; 
header("Location: $url"); 
exit(); 

여러분은 어떻게 생각하십니까? 그것을 멈출 방법이 있습니까?

감사

+2

코드 – gustavotkg

+1

는 요청 된 페이지가 발견되지 않는 경우 기본 페이지로 리디렉션 것 같은데 ... 아마 문제는 코드의 다른 부분에 ... 잘 보인다. 어떻게 든이 동작을 재현 할 수 있습니까? 그리고 브라우저에서 요청한 내용 (예 : FireFox 용 'Live HTTP Headers'-AddOn)을 추적 한 다음 두 경우를 비교해 보았습니까? – Quasdunk

+0

문제는 $ url 변수가 될 수 있습니다. 실제 사이트가 http : //mysite/form.php 인 경우 http : // mysite/thanks /로 이동하고 사이트가 http : ///mysite/form 그러면 http : // mysite/form/thanks로 전달할 것입니다 ... 어떤 프레임 워크를 사용하는지는 모르겠지만 이것이 헤더 전달에 문제가 될 수 있다고 생각합니다. – Daniel

답변

1

RFC for the Location header는 하나의 절대 URI가 필요합니다. scheme, hostname, 절대 경로를 포함하지만, 일부 클라이언트는 상대 URI를 허용 :

HTTP/1.1 인수로»위치에 대한 절대 URI가 필요합니다 이것은 또한 노트 섹션에서 PHP manual으로 지적되고있다. 당신은 일반적으로 사실과 함께 할 수 있습니다 너 자신 상대 하나에서

문제를 절대 URI를 만들기 위해 $ _SERVER [ 'HTTP_HOST'], $ _SERVER [ 'PHP_SELF'] 및 dirname은()를 사용할 수 비표준 헤더를 브라우저에 전달한다는 것입니다. 브라우저는 잘못된 형식의 헤더 문자열을 다르게 해석하며 항상 예상대로 작동하지는 않습니다. 다시 PHP 매뉴얼에서 보여준 바와 같이, 절대 경로 나 상대 경로가 아닌 절대 URI를 생성하여 header() 함수에 전달해야합니다.

/* Redirect to a different page in the current directory that was requested */ 
$host = $_SERVER['HTTP_HOST']; 
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
$extra = 'mypage.php'; 
header("Location: http://$host$uri/$extra"); 
exit; 
+0

필자는 PHP 매뉴얼에서이 내용을 읽었지만 적용하지 않았다고 생각합니다. 또한 다른 디렉토리로 리디렉션하고 있습니다. 이 중 아무 것도 링크를 클릭하지 않고는 도달 할 수없는 페이지에 어떻게 도달하는지 설명합니다. 머리글을 많이 사용하지는 않았지만 99 %의 시간 동안 작동하고 있음을 인정합니다. 그래도 새로운 아이디어를 가져 주셔서 감사합니다. – user1054606

+0

나는 점검을 마친 것이 아니라 절대 경로를 사용하는 것이 트릭을하는 것처럼 보입니다. 브라우저가 페이지를 표시하거나 처리하지 않고 감사 페이지의 태그를 따르는 방식을 여전히 이해할 수 없습니다. 이상한. – user1054606

관련 문제