2009-11-05 46 views
1

我正在开发一个RESTful API,并且我写了一个mod_perl2处理程序来处理请求。通过设置$r->status($http_code)return $http_code;如何禁止mod_perl中的默认apache错误文档?

一切都与错误代码

我处理的交易是很好,除了一个小问题:当我的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处理程序正在返回一个HTTP_ *代码,而不是Apache2 :: Const :: OK。

+0

当阿帕奇::常量不支持像201 HTTP状态代码,你会如何解决这个问题,在Apache 1.3而mod_perl 1.XX? – 2011-06-01 03:51:12

回答

1

请参阅Apache2::Response。我现在没有时间进行实验,但应该有效。

+0

这就是想法,但我从apache得到这个错误: ErrorDocument有两个参数,更改HTTP错误的响应 任何意思是停用apache错误文档?我不认为这是一个问题,因为保留了返回码。例如,某些浏览器选择显示自己的错误文档,而不是apache。 – jeje 2009-11-05 15:30:45

0

您是否在询问如何在回复中不发送消息正文?

如果你想要的东西不是apache要为你做的事情,你需要自己处理请求。你的处理程序的其余部分是什么样的?发布代码使我们不会猜测你在做什么。

从处理程序的返回值允许或Apache知道,如果你自己处理请求,如果需要做更多的东西以您的名义。我猜你正在做后者。

0

我也在找这个。 ,唯一的办法是相当简单:

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

其中$ r是的Apache2 :: Response对象。