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.
これについて何か考えはありますか?
Apacheは、静的コンテンツ(Apacheによって直接提供される実際のファイル)に関連するすべてのHTTPメソッドを実装します。動的コンテンツ(CGIスクリプト、mod_php
など)の場合、Apacheは <Limit>
ディレクティブ で明示的に制限されていない限り)HTTPメソッドが何であるかを気にせず、そのまま適切なハンドラーへのリクエスト。スクリプトは、Apacheではなく、意図したとおりに特定のメソッドを処理する必要があります。非標準のメソッドでも問題なく動的ハンドラーに渡されます。
ASDFG / HTTP/1.1
スクリプトによって処理された無効なmod_php
リクエストでテストされました。 Apacheからの苦情はありません。ハンドラスクリプトの$_SERVER['REQUEST_METHOD']
でASDFG
を受け取りました。
http://httpd.Apache.org/docs/current/mod/core.html に基づいて、これらのメソッドはdirectory
および.htaccess
構成ファイルで変更できますLimit method [method] ... > ... </Limit>
ディレクティブの使用
基本的に、メソッドをブロックするために使用される以下のようなオプションをコメントアウトオプションにする必要があります。
<Limit POST PUT DELETE>
Require valid-user
</Limit>
おそらく、あなたはlibapache2-mod-php5の代わりにlibapache2-mod-php5filterを使用しています。
これを修正する確実な方法は、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
。そのファイルを編集して私の問題を解決しました。