Apache2.4 リクエストヘッダーを制限する

Apache2.4 リクエストヘッダーを制限する

POST仮想ホストのリクエスト ヘッダーを、HEAD、のみに制限しようとしていますGET。これまでに行ったことは、.htaccess仮想ホスト用の を作成し、次のように入力したことです。

<LimitExcept GET HEAD POST>
    Require valid-user
</LimitExcept>

問題は、<LimitExcept>というエラーが表示されることですnot allowed here。使用してみました<Limit>が、同じエラーが発生します。仮想ホスト ファイル内で移動することも試しましたが.conf、それでもエラーになります。理解できないのは、公式ドキュメントではそこでは許可されていると書いてあるのに、私のサーバーでは許可されていないことです。

答え1

GET、POST、HEAD メソッドのみを許可しようとしている場合は、次のようにすれば問題なく動作するはずです。

<Directory "/path/to/documentroot">
    Require method GET POST HEAD
</Directory>

この設定を VirtualHost 内に配置する必要があります。

編集: コメント内の他の質問 (POST リクエストに対してのみパスワード認証を有効にする方法) に回答すると、これは次のディレクティブ (/path/to/your/directory/.htaccess に配置できます) で実現できます。

<RequireAny>
     AuthUserFile /path/to/your/.htpasswd
     AuthName "Login"
     AuthType Basic
     Require method GET HEAD
     Require valid-user
</RequireAny>

これにより、GET および HEAD メソッドが許可されますが、POST リクエストは認証をトリガーします。

答え2

2.4 には、このための mod_allowmethods と呼ばれる特定のモジュールがあり、2.4 では Limit/LimitExcept の使用は推奨されていません。モジュールをロードし、適切な仮想ホストに以下を追加してください。

# documentroot dir in virtualhost
<Directory /path/to/dir>
     AllowMethods GET HEAD POST
     Require valid-user
</Directory>

また、以下で説明するように、サーバー構成で事前にすべてに対して定義してグローバルにすることもできます。

***これはファイルシステム内の / なので、ここでアクセスを拒否し、その後 documentroot やエイリアス化されたディレクトリなどの特定のディレクトリで許可する必要がありますが、後で上書きしない限り、allowmethods はさらに下位に伝播します。

<Directory />
    Require all denied
    AllowMethods GET HEAD POST
</Directory>

関連情報