ApacheでHTTPメソッドを無効にする


11

特定のHTTPメソッド(PUTやTRACEなど)を無効にし、ApacheにHTTP「405 Method not allowed」を送信させるにはどうすればよいですか。

LimitおよびLimitExceptディレクティブを試しましたが、「403 Forbidden」を送信するようです。

私はいくつかの仮想ホストを持っています-これはメインのhttpd.confですべての仮想ホストにあるはずです。

回答:


14

エラーコードを定義するのは、実際よりも少し難しいようです。

ただし、1つの回避策はMIGHTを使用することmod_rewriteです。mod_rewriteが見た目が不可能なApacheの問題の少なくとも99%でブードゥーダンスを提供し、問題を解決できるという事実により、その1つを頭から取り出しました。

他のすべてが失敗した場合、次のようなものを試してください

RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^GET [AND]
RewriteCond %{REQUEST_METHOD} !^POST 
RewriteRule .* /yourerrordocuments/405.html [R=405,L] 

私はそれがおそらく最も良い解決策ではないことを知っていますが、それは一種の仕事でなければなりません...


1
+1 Mod_rewrite voodooはすべての問題を解決します(すべての限られたセットに対して)。
— クリスS

6
また、mod_rewriteはすべてのURLプロセスで遅い正規表現を実行するため、サーバーの速度が低下します。注意して使用してください。
— マーチン

ありがとう-R = 405で応答コードを設定するすてきなトリック。OPTIONSが適切な値を報告するより良い方法があることを望んでいましたが、それは不可能だと思います
— グレッグ

[AND]フラグをサポートしているApache / mod_rewriteのバージョンは何ですか?[OR](および「および」暗黙的)のみが表示されます:httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
— asjo

4

トレース方法の場合、これを追加できます

TraceEnable off

メイン設定ファイル内


2

書き換えエンジンを有効にするには、次を追加します。

 RewriteEngine On 

デフォルトでは、書き換え構成は仮想サーバー間で継承されないことに注意してください。RewriteEngine Onを各仮想ホストに追加します。

RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
RewriteRule .* - [F]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.