2009-11-05 11 views
1

RESTful API를 개발 중이며 요청을 처리하는 mod_perl2 핸들러를 작성했습니다. $r->status($http_code)return $http_code;mod_perl에서 기본 아파치 오류 문서를 어떻게 억제합니까?

모두를 설정하여 오류 코드와

내 핸들러 거래는 약간의 문제를 제외하고 괜찮 : 내 HTTP_CODE이 다른 경우 (200)는 (예 : 404), 아파치에 대한 기본 HTML 오류 문서를 추가보다 내 자신이 생성 한 응답. 예를 들어

:

GET /foo 

을 제공합니다 :

$VAR1 = bless({ 
       'status' => 404, 
       'data' => {}, 
       'message' => 'Resource not found for foo' 
       }, 'My::Response'); 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>404 Not Found</title> 
</head><body> 
<h1>Not Found</h1> 
<p>The requested URL /foo was not found on this server.</p> 
<p>Additionally, a 404 Not Found 
error was encountered while trying to use an ErrorDocument to handle the request.</p> 
<hr> 
<address>Apache/2.0.54 (Fedora) Server at localhost Port 80</address> 
</body></html> 

어떻게이 아파치를 제거 HTML을 생성합니까?

업데이트 : 내 잘못. 내 mod_perl2 처리기가 Apache2 :: Const :: OK 대신 HTTP_ * 코드를 반환했습니다.

+0

Apache :: Constants가 201과 같은 HTTP 상태 코드를 지원하지 않으면 어떻게 아파치 1.3 및 mod_perl 1.xx에서이 문제를 해결할 수 있습니까? –

답변

1

Apache2::Response을 참조하십시오. 지금은 실험 할 시간이 없지만 제대로 작동 할 것입니다.

+0

그건 생각이지만 아파치에서이 오류가 발생했습니다 : ErrorDocument는 두 개의 인수를 취합니다. HTTP 오류에 대한 응답 변경 아파치 오류 문서를 비활성화하는 것은 어떤 의미입니까? 반환 코드가 보관 된 이후로는 이것이 문제라고 생각하지 않습니다. 일부 브라우저는 예를 들어 아파치 대신 자신의 오류 문서를 표시하도록 선택합니다. – jeje

0

응답에 메시지 본문을 보내는 방법을 묻는 중입니까?

아파치가 당신을 위해 할 일이 아닌 다른 것을 원하면 직접 요청을 처리해야합니다. 나머지 처리기는 어떻게 생겼습니까? 게시 코드는 우리가 현재하고있는 일을 추측하지 못하도록합니다.

처리기의 반환 값은 요청을 직접 처리했는지 또는 사용자 대신 더 많은 작업을해야 하는지를 apache에 알립니다. 나는 당신이 후자를하고 있다고 생각하고 있습니다.

0

이 역시 찾고있었습니다. 그리고 트릭은 매우 간단했다

$의 R은 아파치 :: 응답 개체입니다
$r->status(HTTP_NOT_FOUND); 
$r->custom_response(404, ""); 
return OK; 

.

관련 문제