web-dev-qa-db-ja.com

Apache HTTPサーバーですべてのHTTPメソッドを有効にする方法

Apache WebサーバーでRFC 2616で定義されているすべてのHTTPメソッドの処理を有効にするにはどうすればよいですか?これらは:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Apache HTTPサーバー、バージョン2.2.22(Ubuntu)を使用しています
これが私の.htaccessファイル:

<Location /output>
        Dav On
    <LimitExcept GET HEAD OPTIONS PUT>
        Allow from all
    </LimitExcept>
</Location>

以下は、Telnetを実行して得られる出力です。PUTメソッドはありません。

Escape character is '^]'.
OPTIONS / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 09 Oct 2012 06:56:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Allow: GET,HEAD,POST,OPTIONS
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html

Connection closed by foreign Host.

これについて何か考えはありますか?

16
MatandDie

Apacheは、静的コンテンツ(Apacheによって直接提供される実際のファイル)に関連するすべてのHTTPメソッドを実装します。動的コンテンツ(CGIスクリプト、mod_phpなど)の場合、Apacheは <Limit>ディレクティブ で明示的に制限されていない限り)HTTPメソッドが何であるかを気にせず、そのまま適切なハンドラーへのリクエスト。スクリプトは、Apacheではなく、意図したとおりに特定のメソッドを処理する必要があります。非標準のメソッドでも問題なく動的ハンドラーに渡されます。

ASDFG / HTTP/1.1スクリプトによって処理された無効なmod_phpリクエストでテストされました。 Apacheからの苦情はありません。ハンドラスクリプトの$_SERVER['REQUEST_METHOD']ASDFGを受け取りました。

7
lanzz

http://httpd.Apache.org/docs/current/mod/core.html に基づいて、これらのメソッドはdirectoryおよび.htaccess構成ファイルで変更できますLimit method [method] ... > ... </Limit>ディレクティブの使用

基本的に、メソッドをブロックするために使用される以下のようなオプションをコメントアウトオプションにする必要があります。

<Limit POST PUT DELETE>
  Require valid-user
</Limit>
2
MaVRoSCy

おそらく、あなたはlibapache2-mod-php5の代わりにlibapache2-mod-php5filterを使用しています。

詳細: Apache2およびphp5:モジュールまたはフィルター

1
skazi

これを修正する確実な方法は、Apacheがリクエストを拒否する理由を知ることですあなたの特定の場合。エラーログからこれを学ぶことができます。

私の場合、 tail -f /usr/local/Apache/logs/error_logはこれを与えました:

[Sun Sep 18 08:39:52.570672 2016] [:error] [pid 32076:tid 140086307448576] 
[client 93.125.93.77] ModSecurity: Access denied with code 501 (phase 2). 
Match of "rx ^((?:(?:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" 
required. [file "/usr/local/Apache/conf/modsec-imh/01_base_rules.conf"] [line 
"32"] [id "960032"] [msg "Method is not allowed by policy"] [severity 
"CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "104.244.122.237"] 
[uri "/products/order/items/45"] [unique_id "V96LGGj0eu0AAH1MR8sAAACB"]

セキュリティルールとそれが由来するファイルについて言及しています:/usr/local/Apache/conf/modsec-imh/01_base_rules.conf。そのファイルを編集して私の問題を解決しました。

1
Anton Khamets