2011-07-31 3 views
1

일반적인 웹 응용 프로그램은 요청이 들어올 때마다 기본 단일 서버 객체 (예 : PHP 스크립트)를 호출합니다. Apache가 해당 스크립트 또는 자원을 찾지 못하는 경우 Apache는 오류 페이지를 전달하려고 시도합니다.Apache의 오류 처리기를 기본 메커니즘으로 사용하지 않는 이유는 무엇입니까?

또는 vhost의 htdocs/루트 디렉토리에 스크립트 또는 리소스가 존재하지 않는 방식으로 웹 응용 프로그램을 설계 할 수 있습니다. 따라서 각 요청은 아파치가 오류 페이지를 전달하도록 강제 할 것이다.

서버 측 스크립트를 표준 오류 처리기로 정의하면 모든 URL에서 스크립트가 트리거됩니다. 따라서 단일 스크립트는 단일 작업 지점이됩니다.

누구나 이유를 알고 있습니까? 왜이 접근 방식이 잘못 되었습니까?

+0

닫기? 여기 뭐가 잘못 됐니? 문제는 기술적 인 문제입니다. 그렇지 않니? – SteAp

+0

이것이 최고의 연습 문제라고 생각합니다. 나는 그것을 좋아한다. – Shi

답변

1

ErrorHandler 문에서 호출 한 페이지가 적어도 $ Apache, PHP 설치시 $ _GET, $ _POST, $ _REQUEST, $ _COOKIE와 같은 양식 데이터에 액세스하지 못하는 것 같습니다.

<Directory /same/as/document/root/> 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule /* index.php 
</Directory> 

첫 번째 줄은 mod_rewrite를 할 수 있습니다 :

나는 결국 나를 위해 작동하는 것 같다 다음과 같은 주문으로 탈출 아파치의 mod_rewrite입니다 지옥의 구덩이에 여행을 대담 후. 두 번째 줄은 다시 쓰기 기준을 문서 루트로 설정합니다. 즉, 모든 하위 디렉토리의 URL이 처리됩니다. 세 번째 줄은 요청 된 파일 이름 ("% {REQUEST_FILENAME}")이 존재하지 않는 경우에만 규칙이 활성화되도록 조건을 설정합니다 ("! -f"). 네 번째 줄은 "/"로 시작하는 모든 경로와 일치하며 index.php로 리디렉션합니다.

면책 조항 : 저는 Perl 정규 표현식과 Apache mod_rewrite에 대해 거의 알고 있지 않습니다.

그냥 사용자가 양식의 URL 경로에 입력 할 수 있음을주의 :

/some_directory/ or /some_directory 

은 그래서 당신은 두 경우 모두를 처리 할 수 ​​있습니다.

1

제 생각에 이것은 웹 서버에 대한 벌칙입니다.

리소스가 요청 될 때마다 파일 시스템에서 파일을 검색하고 파일을 찾지 못하면 오류 처리기 스크립트가 검색되어 실행됩니다.

PHP가 실패하면 더 이상 오류 페이지가 표시되지 않으며 Apache는 오류 발생과 같은 오류를 기록하고 오류 처리기에서 오류를 처리합니다.

+0

파일이 존재하는지 여부를 확인하고 기존의 파일을로드하는 것보다 기본 객체 (즉 캐시 된 것)를로드하는 것이 더 빠릅니다. – Christian

1

원래의 URL을 얻고 HTTP 오류 코드를 보내지 않으려면 약간의 작업을해야 할 것입니다. PHP를 모든 요청에 ​​사용하는 것이 목표라면 mod_rewrite을 사용하는 것이 더 나을 것입니다.

관련 문제