2010-05-19 3 views
0

URL을 다시 쓰는 데 사용자 지정 HttpModule을 사용하는 IIS 6에서 실행되는 응용 프로그램이 있습니다. 이것은 Context.RewritePath 대상이 .php 파일 인 경우를 제외하고는 훌륭하게 작동합니다. PHP 파일은 예상대로 실행되지만 $ _POST 콜렉션은 비어 있으므로 다시 작성된 URL에 제출 된 양식에는 액세스 할 수 없습니다. Request.Form 컬렉션에 문제가 없으므로 .aspx 파일을 다시 작성할 때 문제가 없습니다.

그럼 내 질문에는 두 부분이 있습니다. $ _POST 모음이 채워지지 않는 이유는 무엇입니까? 재 작성 후 .php $ _POST 콜렉션이 올바르게 채워지는 방법이 있습니까?

코드의 방식으로 많이 표시하지 않습니다. 단순한 것일뿐입니다. 일단 HttpModule이 요청을 보낼 곳을 찾으면,

context.RewritePath(newPath); 

이 있습니다.

편집 : 나는 PHP 파일 (방법 described here)을 var_dump(file_get_contents('php://input'));을 할 경우 는 흥미롭게도, 양식의 내용이 표시됩니다. 따라서 데이터는 PHP 스크립트에는 도달하지만 $ _POST 배열에는 도달하지 못합니다.

답변

1

리디렉션은 POST 동작을 GET 동작으로 전환합니다. 즉, 처음에 전송 된 POST 매개 변수는 모두 손실됩니다. 변수를 전달하려면 백 채널 메소드 (예 : 세션)를 사용해야합니다.

+0

믿어지지 않는 정도로 빠른 답변 주셔서 감사합니다. .aspx 페이지는 양식 모음에 액세스 할 수 있지만 .php 파일은 액세스 할 수 없습니다. – jammus

+0

내 생각에 ASP.NET은 backchannel을 투명하게 구현합니다. –

+0

좋은 이전 ASP.NET. 재미있는 file_get_contents ('php : // input') 호출은 POST 데이터가 어떻게 든 통과하고 있음을 보여줍니다. $ _POST 배열에 데이터가 채워지지 않는다는 것입니다. – jammus