How do I suppress the default apache error documen

2019-06-06 06:23发布

问题:

I'm developing a RESTful API and I wrote a mod_perl2 handler that takes care of the request.

My handler deals with error codes by setting $r->status($http_code) and return $http_code;

Everything is fine, except a little problem: when my http_code is different than 200 (for instance 404), apache appends a default HTML error document to my own generated response.

For instance:

GET /foo

Gives:

$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>

How do I get rid of this apache generated HTML?

UPDATE: My fault. My mod_perl2 handler was returning a HTTP_* code instead of Apache2::Const::OK.

回答1:

See Apache2::Response. I do not have time to experiment right now, but that should work.



回答2:

Are you asking how to send no message body in your response?

If you want something other than what apache is going to do for you, you need to handle the request yourself. What does the rest of your handler look like? Posting code keeps us from guessing what you are doing.

The return value from your handler lets apache know if you handled the request yourself or if it needs to do something more on your behalf. I'm guessing that you're doing the latter.



回答3:

I was looking for this too. And the trick was quite simple:

$r->status(HTTP_NOT_FOUND);
$r->custom_response(404, "");
return OK;

where $r is Apache2::Response object.