내가 그 디렉토리를하지 않고도 PHP에서이 문제를 처리 할 수있는 방법이PHP 5가 Tomcat이나 GAE와 비슷한 처리를 요청할 수 있습니까?
http://example.com/something/a/few/directories/deep
에 가고 싶어 말할 수? 도메인 이름 뒤에 모든 것을 가져 와서 변수로 사용하고 싶습니다.
내가 그 디렉토리를하지 않고도 PHP에서이 문제를 처리 할 수있는 방법이PHP 5가 Tomcat이나 GAE와 비슷한 처리를 요청할 수 있습니까?
http://example.com/something/a/few/directories/deep
에 가고 싶어 말할 수? 도메인 이름 뒤에 모든 것을 가져 와서 변수로 사용하고 싶습니다.
사실 PHP5 관련 질문이 아닙니다. URL 재 작성은 웹 서버의 일부입니다.
Apache에서 mod_rewrite을 사용할 때 (IIS에 대해서는 알지 못하지만 유사 할 가능성이 있습니다).
이렇게하는 가장 일반적인 방법은 mod_rewrite를 사용하는 것입니다. (이것에 대한 소개는 http://articles.sitepoint.com/article/guide-url-rewriting입니다.) 이렇게하면 PHP 스크립트에 전달 된 쿼리 매개 변수에 이러한 친숙한 URL을 내부적으로 매핑 할 수 있습니다.
에는 이러한 시나리오를 처리하는 데 mod_rewrite가 필요하지 않습니다. 인기있는 PHP 프레임 워크의 대부분은 현재 URI 세그먼트 파싱을 지원합니다. 이것은 약간의 보안 허점을 여전히 남겨 두는 간단한 예입니다.
당신은 앞으로 그것을 전역의 $ _SERVER 변수 중 하나를 복용하고 분할하여이 문제를 해결할 수과 같이 슬래시 :
if (!empty($_SERVER['REQUEST_URI'])) {
$segments = explode('/', $_SERVER['REQUEST_URI']);
}
$ 세그먼트 이제 반복하는 세그먼트의 배열을 포함 변수입니다.
확실히. 시작이 일정하거나 가능한 값이 몇 개인 경우에도 mod_rewrite
이 필요하지 않습니다. something
(확장자 없음)이라는 PHP 파일을 만들고 Apache에게 (SetHandler
또는 유사한 지시문을 통해) PHP로 처리하도록 지시하십시오. 그런 다음 a/few/directories/deep
IIRC와 같은 모양의 $_SERVER['PATH_INFO']
을 검사하십시오. 원하는대로 경로를 지정할 수 있습니다. 또는
. Martin이 말했듯이 간단한 mod_rewrite
규칙을 사용하여 /dispatch.php/something/a/few/directories/deep
으로 다시 작성하면 전체 경로가 PATH_INFO
이됩니다.
당신이 아파치를 사용하는 가정 ...
(가상 호스트의 conf 또는 당신 문서 루트에 htaccess로 파일을 드롭) 다시 쓰기 규칙을 추가, index.php에 모든 것을 가리 키도록. 그런 다음의 index.php의 내부 요청 URI를 추출 경로
RewriteEngine on
RewriteRule ^.*$ index.php [L,QSA]
index.php를 구문 분석 :
$ 파일 경로 = $ _SERVER [ 'REQUEST_URI를'];
$ filepath = ltrim ($ myname, '/'); // 원하는 경우 선행 슬래시를 제거합니다.
이것은 원하는 mod_rewrite 룰의 최대량입니다. – staticsan
단 하나의 PHP 스크립트로 모든 호출을 리디렉션하려면 여전히 mod_rewrite가 필요합니다.) –
mod_rewrite 또는이 세분화를 수행하는 PHP 스크립트 (라우팅이라고도 함)에 이러한 모든 요청을 매핑하는 데 필요한 다른 메커니즘이 필요합니다. – rojoca
@Kent, 명성. 나는 이걸 위해 발로 차있다. –