Apache LimitExcept 在允许的方法上返回错误 400

Apache LimitExcept 在允许的方法上返回错误 400

我的 Apache 中有以下指令httpd.conf

<LimitExcept OPTIONS PROPFIND REPORT>
   deny from all
</LimitExcept>

OPTIONS并按PROPFIND预期工作,但REPORT返回400: Bad Request。删除LimitExceptalltogether ,一切都按预期工作。

对于为什么会发生这种情况,您有什么想法吗?

(请参见我的问题看看我想做什么)。

访问日志显示:

192.168.161.1 - - [21/Jun/2010:08:42:26 +1000] "REPORT /logs/MV101Apps/!svn/bc/7699/MyApp/MyApps.edp HTTP/1.1" 400 101

错误日志显示:

[Mon Jun 21 08:42:26 2010] [error] [client 192.168.161.1] client denied by server configuration: C:/Program Files/CollabNet/Subversion Server/httpd/htdocs/logs

更新

好的,快速检查后发现,无论有没有<LimitExcept>URLREPORT都保持不变。这是没有 时日志的样子<LimitExcept>(配置中的其他所有内容都保持不变):

192.168.161.1 - - [22/Jun/2010:21:03:42 +1000] "REPORT /logs/MV101Apps/!svn/bc/7821/MyApp/MyApps.edp HTTP/1.1" 200 115

(请注意,该 URL 是由命令生成的 Subversion URL svn log- 我不是!svn向其中添加 URL 的人)

完整的 VirutalHost/logs/如下所示:

<Location /logs/>
   DAV svn
   SVNParentPath C:\SVN
   <LimitExcept OPTIONS PROPFIND REPORT>
       deny from all
   </LimitExcept>
</Location>

答案1

这是 2.2.15 中最新的 mod_dav.c 的样子(为简洁起见进行了编辑):

static int dav_method_report(request_rec *r)
{
  int result;
  apr_xml_doc *doc;

  if ((result = ap_xml_parse_input(r, &doc)) != OK)
    return result;
  if (doc == NULL) {
    return HTTP_BAD_REQUEST;
  }

因此,我的直觉是 ap_xml_parse_input(r, &doc)) 留下 doc=NULL; 基于无法访问那个可疑的文档名称(它里面有一个!??)并返回 400:

"REPORT /logs/MV101Apps/!svn/bc/7699/MyApp/MyApps.edp HTTP/1.1"

...

client denied by server configuration: C:/Program Files/CollabNet/Subversion Server/httpd/htdocs/logs

...问题似乎在于如何将 access_log 中的虚拟 /logs/ 映射到 error_log 中的此目录,以及是否存在适当的访问控制以允许从该位置读取资源。接下来我们需要查看所有配置信息。

相关内容