![Apache LimitExcept 在允许的方法上返回错误 400](https://linux22.com/image/516490/Apache%20LimitExcept%20%E5%9C%A8%E5%85%81%E8%AE%B8%E7%9A%84%E6%96%B9%E6%B3%95%E4%B8%8A%E8%BF%94%E5%9B%9E%E9%94%99%E8%AF%AF%20400.png)
我的 Apache 中有以下指令httpd.conf
:
<LimitExcept OPTIONS PROPFIND REPORT>
deny from all
</LimitExcept>
OPTIONS
并按PROPFIND
预期工作,但REPORT
返回400: Bad Request
。删除LimitExcept
alltogether ,一切都按预期工作。
对于为什么会发生这种情况,您有什么想法吗?
(请参见我的问题看看我想做什么)。
访问日志显示:
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 中的此目录,以及是否存在适当的访问控制以允许从该位置读取资源。接下来我们需要查看所有配置信息。