Apache LimitExcept は許可されたメソッドでエラー 400 を返します

Apache LimitExcept は許可されたメソッドでエラー 400 を返します

私の Apache には次のディレクティブがありますhttpd.conf:

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

OPTIONSPROPFIND期待どおりに動作しますが、REPORTが返されます400: Bad Request。 をLimitExceptすべて削除すると、すべてが期待どおりに動作します。

なぜそうなるのか、何か考えはありますか?

(参照してください私の質問はここです私が何をしようとしているのかを知るためです。

アクセス ログには次の内容が表示されます。

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

アップデート

簡単に調べてみると、 の有無にかかわらず URL は同じままであることがわかります<LimitExcept>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 はコマンドによって生成された Subversion URL であることに注意してくださいsvn log。これを追加したのは私ではありません!svn)

完全な 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)) は、疑わしいドキュメント名 (! が含まれている??) にアクセスできず、400 を返していることから、doc=NULL; のままになっていると思います。

"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 のこのディレクトリにどのようにマップされるか、また、その場所からリソースを読み取ることができるように適切なアクセス制御があるかどうかにあるようです。次に、そのすべての構成情報を確認する必要があります。

関連情報