
У меня в 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>
URL REPORT
остается тем же самым. Вот как выглядит журнал без <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-адрес — это URL-адрес Subversion, сгенерированный командой svn log
— я не добавляю !svn
к нему)
Полный VirutalHost /logs/
выглядит так:
<Location /logs/>
DAV svn
SVNParentPath C:\SVN
<LimitExcept OPTIONS PROPFIND REPORT>
deny from all
</LimitExcept>
</Location>
решение1
Вот как выглядит последняя версия mod_dav.c в версии 2.2.15 (отредактировано для краткости):
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
...похоже, проблема в том, как виртуальные /logs/ из access_log сопоставляются с этим каталогом в error_log, и есть ли надлежащие элементы управления доступом, позволяющие читать ресурсы из этого местоположения. Далее нам нужно увидеть всю эту информацию о конфигурации.