2014-01-23 2 views
7

간단한 질문이 있지만 답변을 찾을 수 없습니다..php url 뒤에 슬래시 (/)를 넣으면 어떻게됩니까?

나는 "mysite.com"이라는 사이트가 있다고합니다. "mysite.com"또는 "mysite.com/index.php"를 입력하여 색인 페이지에 액세스 할 수 있습니다. 잘 작동하지만 ... "mysite.com/index.php/"로 이동하려고하면 페이지가로드되지만 올바르게 표시되지는 않습니다. 정확히 무엇이 발생 했습니까? index.php가 (존재하지 않는) 디렉토리 (즉, "mysite.com/index.php/index.php"를 찾으려고 할 것입니다)로 취급되므로 404 오류가 반환되어야한다고 생각합니다. 이것은 분명히 사실이 아닙니다. 누군가 정확히 무슨 일이 일어 났는지 말해 줄 수 있습니까? 슬래시 뒤에 아무 것도 입력하지 않은 경우에도 마찬가지입니다 (예 : "mysite.com/index.php/hello"

).

+0

그냥 PATH_INFO로 처리됩니다. 그러나 가상 경로 조각은 상대 리소스 링크 (CSS, 이미지)를 손상시킵니다. 답장을 보내 주셔서 감사합니다. – mario

+0

. 나는 아직도 이해하지 못한다. 첫 번째 장소에서 이러한 URL이 유효하도록 허용하는 시점은 무엇입니까? 왜 그냥 404 오류를 반환하지? – Guy

답변

4

이는 Apache 환경 변수 PATH_INFO가 원인입니다.

PATH_INFO는

사실, PATH_INFO는 아파치 웹 서버 역할을 PHP 페이지에 관련하고 당 말 PHP되지 않습니다.

PATH_INFO는 AcceptPathInfo 지정 문이 켜져있을 때 Apache가 설정 한 환경 변수입니다. 실제 파일 이름 (또는 기존 디렉토리에 존재하지 않는 파일) 다음에 나오는 경로 이름 정보가 수용되거나 거부됩니다. 그런 다음 환경 변수가 페이지 렌더링을 담당하는 Apache/CGI 모듈에 전달됩니다.

변수는 PHP에서 $ _SERVER [ 'PATH_INFO']을 (를) 사용하여 액세스 할 수 있습니다.

예를 들어,/test/location이 단일 파일 here.html 만 포함하는 디렉토리를 가리킨다 고 가정합니다. 그런 다음 /test/here.html/more 및 /test/nothere.html/more에 대한 요청이 모두 PATH_INFO로 수집됩니다. URL에 "디렉토리"는 스크립트가 아닌 실제 디렉토리 서버주의 사항은,이 스크립트를 실행하면

이 답변은 앤드류 무어 Link to original answer

+0

이것은 Apache에게 정말 독특한 것입니까? NGINX는 똑같은 일을하지 않을 것입니까? – Barmar

+3

다른 답변에서 복사하는 경우 저작자 표시가 필요합니다. – mario

+0

@mario 이미 다른 질문에 대한 링크를 제공하고 있습니다. –

1

에서 복사됩니다. URL 경로의 나머지 구성 요소는 PHP 변수 $_SERVER['PATH_INFO']에 저장됩니다.

관련 문제