Apache HTTP Server Version 2.0
아파치 1.1.1과 그 이전 버전의 경우 CGI 환경에서 PATH_INFO를 만드는 방법이 직관적이지 않고 어떤 경우 서버를 죽이기도 했다. 아파치 1.2 이후 이 방법이 변했다. 기존의 어떤 CGI 프로그램들과 약간의 호환문제가 있지만 아파치 1.2의 행동은 아직도 CGI/1.1 규약을 벋어나지않으며, 쉽게 CGI 스크립트를 수정할 수 있다. (아래 참고)
아파치 1.1.1과 그 이전 버전은 URL 대신 파일명을 가지고 PATH_INFO와 SCRIPT_NAME 환경변수를 구현했다. 많은 경우 올바른 결과를 얻지만, 파일시스템 경로가 path 정보를 포함한다면 잘못된 결과가 나올 수 있다. 예를 들어, 설정파일에 다음과 같은 내용이 있다면:
Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
이 경우 user.cgi
는 CGI 스크립트이고, "/ralph"는
CGI에 넘겨지는 정보다. 이 경우
"/cgi-ralph/script/
"로 요청이 들어오면 PATH는
"/ralph/script
"가 되고, SCRIPT_NAME은
"/cgi-
"가 된다. 후자는 분명히 잘못되었다.
심지어 어떤 경우 서버가 죽기도 한다.
아파치 1.2 이후에서는 URL에서 클라이언트가 조절가능한
부분을 판단하여 SCRIPT_NAME과 PATH_INFO를 설정한다. 위의
예에서 PATH_INFO는 "/script
"가 되고, SCRIPT_NAME은
"/cgi-ralph
"가 된다. 이는 합리적이며 서버에
문제를 일으키지 않는다. 또, 이전 버전과 달리 스크립트에서
"http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO
"가
현재 스크립트를 가리키는 URL임을 보장할 수 있다.
그러나 불행히도 Alias
지시어의
"/ralph
" 정보는 사라진다. 그러나 우리는
파일시스템을 사용하여 이런 정보를 넘겨주는 것이 바람직한
방법이 아니며, 이를 사용하는 스크립트는 작동할"만하지"
않다고 생각한다. 그러나 아파치 1.2b3 이후에는 이에 대한
해결책이 있다.
아파치 이전 버전이나 다른 서버용으로 설계된 스크립트는 이전 PATH_INFO 변수가 제공했던 정보가 필요할 수 있다. 그래서 아파치 1.2 (1.2b3 이후)는 FILEPATH_INFO라는 변수를 더 설정한다. 이 환경변수는 아파치 1.1.1의 PATH_INFO 값을 가진다.
스크립트가 아파치 1.2와 이전 버전 모두에서 동작하게하려면, 먼저 FILEPATH_INFO가 있는지 검사하고 있다면 그것을 사용한다. 없다면 PATH_INFO를 사용한다. 예를 들어, Perl로는 다음과 같다:
$path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
이렇게 하면 모든 아파치를 포함하여 CGI/1.1 규정을 따르는 모든 서버에서 스크립트가 동작할 수 있다.