当初はリライトルールでphp接尾辞が付いたURLへのアクセスを直接禁止したかったのです。しかし、書き換えルールが再帰的に呼び出されることが後で判明しました。書き換えルールで php が直接禁止されている場合、php ファイルに書き換えられたルールも無効になります。 RewriteEngineOn
これは再帰呼び出しで本当に怖いです。最初に /test にアクセスすると、URL の書き換えが一度チェックされ、^test$ が一致すると内部的に /test.php にリダイレクトされます。 URL書き換えなので再度確認すると、^test.php$と一致し、直接[F](Forbidden)操作を強いられたため、403エラーとなりました。この場合、サーバーによってリダイレクトされたかどうかを判断する必要があります。この時、サーバー変数にREDIRECT_URLというものが使えるようになっていたので、これを使って判断してみました。
RewriteRule.*$0[F,L] は、/test への書き込みアクセス時に依然として 403 を取得します。少し調べたところ、RewriteCond の %{REDIRECT_URL} が常に空であることがわかりました。これは、この場合、何もありません。 PHP の書き換えルールで直接使用する方法は禁止されています。しかし、それはそれほど派手ではない方法でも達成できます。 php ファイル内の REDIRECT_URL を判断するだけで、この方法は実装できますが、非常に劣っているように感じますが、これより良い方法は今のところ見つかりません。