POSTメソッドを介してのみアクセスできるファイルが1つあります。
/var/www/folder/index.php
ドキュメントルートは/var/www/
で、index.php
はフォルダ内にネストされています。
Apacheのバージョンは2.4.4です。
私の構成は次のとおりです。
<Directory "/var/www/folder">
<Files "index.php">
order deny,allow
Allow from all
<LimitExcept POST>
Deny from all
</LimitExcept>
</Files>
</Directory>
私は127.0.0.1/folder
でサーバーにアクセスしますが、GETを実行して、POSTファイルを通常どおりに取得できます。
order allow,deny
、require、limitexcept、limitの順序を逆にしてみました。
POSTリクエストのみをフォルダー内の1つのファイルで処理することを許可するにはどうすればよいですか?
Require
ディレクティブを使用できます:
<Directory "/var/www/folder">
<Files "index.php">
Require method POST
</Files>
</Directory>
ただし、これは承認セクションの一部であるため、代わりにこれを試してください。
<Directory "/var/www/folder">
<Files "index.php">
<LimitExcept POST>
Order allow,deny
Deny from all
</LimitExcept>
</Files>
</Directory>
Apacheの設定トリックが機能しない場合は、index.php自体で実行できます。ファイルの先頭に次のようなものを追加します。
<?php
if($_SERVER['REQUEST_METHOD'] != "POST") {
header("HTTP/1.0 403 Forbidden");
print("Forbidden");
exit();
}
アクセス制御ディレクティブのOrder
、Allow
、およびDeny
ファミリーは mod_authz_Host の代わりに廃止されました。
競合するRequire
ディレクティブが構成よりも優先されるため、これが実際に既存の構成が機能していない理由である可能性があります(これは mod_access_compat によって引き続きサポートされますが、これらのディレクティブ将来のバージョンで削除される予定です)。
あなたは2.4ファミリーを使っているので、新しいスタイルのディレクティブも使うべきです。 2.4.4で以下の設定をテストしましたが、必要に応じて機能します。
<Directory "/var/www/folder">
Require all granted
<Files "index.php">
<LimitExcept POST>
Require all denied
</LimitExcept>
</Files>
</Directory>
Require method
ディレクティブを使用できるというジャックの観察も正しく、おそらくこれをより2.4に似た方法で行っています。
書き直し条件は実際にはより効率的ですが、時々トリッキーになる可能性のある正規表現を使用しているため、安全性は低くなります。