2009-09-07 4 views
1

Windows의 콘솔 모드에서 Apache 2.2.13을 실행하고 있습니다. 요청을 처리하는 실행 파일을 만들었습니다. 특정 경우에 디렉토리를 가리키는 URL을 감지했지만 끝에 슬래시가없는 경우 슬래시가 추가 된 동일한 URL로 리디렉션을 시도합니다. 출구 코드는 응답 헤더에이를 가진이 작동하지 않습니다, 이상하게도 301으로 설정됩니다Apache CGI가 절대 URI로 리디렉션되지 않음

Location: /cgi-bin/mycgi.exe/something/ 

을하지만,이 작업을 수행합니다

Location: something/ 

내가 뭔가 잘못하고 있습니까? 아니면 아파치에서 버그를 발견 했습니까? (그렇다면 어디서 어떻게 게시해야합니까?)

답변

1

보통을 : 또한 감사

, 클라이언트에서 작동하지 않는 다음의 URL을 지정하십시오 , '위치'에는 h를 포함한 전체 URL이 포함됩니다. ttp :와 호스트 이름. DVK에서 설명한 경우입니다.

위치 : 내부 리디렉션 :

이 /cgi-bin/mycgi.exe/something/ 실제로 다른 무언가이다. the CGI specification으로 정의되며 PHP와 같은 CGI에서 파생 된 일부 서버 환경에서 작동합니다. 위치에 '가상 경로'가 포함되어 있으면 Apache는 해당 경로의 페이지/스크립트를 즉시 제공하고 브라우저는 리디렉션이 없음을 알지 못합니다. 뭔가/

이 :

은 물론 그게 301 내부 리디렉션을 수행 할 말이 없기 때문에 브라우저가가 301

위치에 있음을 볼 수 없을 때 당신이 원하는 게 아니에요 다른 한편으로, 아무것도 아니다. 전체 URL이 아니며 '/'로 시작하지 않으므로 가상 경로가 아닙니다. 아파치는 그걸로 무엇을 해야할지 모르기 때문에 가상 경로가 아니라는 것을 추측하므로 더 이상의 코멘트없이 브라우저에 다시 뱉어 낸다.

'위치'헤더에서 브라우저로 전송하는 것은 잘못되었지만 대부분의 경우 브라우저에서 허용되므로 많은 사람들이이를 허용하므로 작동하는 것으로 보입니다.정말 당신은 전체 URL을 전달해야합니다

Location: http://www.example.com/cgi-bin/mycgi.exe/something/ 
+0

감사합니다. "http : //"및 "HTTP_HOST"env 값을 포함하도록 '리디렉션 접두사'를 수정하겠습니다. –

0

1) 리디렉션 기능 (예 : "볼 때해야 할 일"위치 : http 응답)은 Apache가 아니라 브라우저에 있습니다. . 나는 당신이 그것을 알고 있다고 가정하지만 그것이 확실한지를 확인하기를 원했습니다. 여기에 관련성이있는 이유는 as per the RFC이므로 301 응답의 주소는 "하나의 절대 URI"여야합니다. 따라서 URI 예에 도메인 이름이 누락되어 있습니다 (예 : 필요가 있습니다 http://your.web.server/cgi-bin/mycgi.exe/something/

일부 웹 클라이언트는 301을 상대 경로로 허용하지만 일부는 그렇지 않습니다.

2) 클라이언트의 오류 및 Apache 로그의 오류를 포함하여 "작동하지 않음"이란 의미를 정확히 지정할 수 있습니까?

감사

+0

디버깅, 나는 mycgi.exe는 "REDIRECT_"로 시작 모든 환경 변수의 전체 사본, 반복적으로 호출하지만, 업데이트 된 "REQUEST_URI없이되고 있었다 발견하는 경우 ", 그래서 이것은 반복 될 것이고 env-vars ("REDIRECT_REDIRECT_REDIRECT _... ")의 복제는이주기를 깨고 아파치가 서버 오류 고지 페이지를 보여줄 것이다. –