0

サーバーで ServerSide Include (SSI) が有効になっています。しかし、私は自分のフォルダで実行したくありません。そのため、.htaccess ファイルを追加して、そのフォルダーで SSI を無効にしたかったのですが、どうすればよいですか? 私は試した

 RemoveHandler server-parsed .shtml

しかし、それは機能していません。どうすれば達成できますか?

4

2 に答える 2

1

まず第一に、あなたの使用はRemoveHandler意味がありません。ドキュメントによると、構文は ですRemoveHandler extension [extension] ...。つまり、で終わるファイルのハンドラーを.shtml削除するだけでなく、で終わるファイルのハンドラーも削除しますserver-parsed

ハンドラーは、特定のファイルについて、ユーザーに直接送信するのではなく、他のプログラムによって解釈される必要があることを Apache に伝える方法です。たとえば、末尾が for のファイルのハンドラーは、.php最初に php パーサーを介してファイルを送信します。このハンドラーを削除すると、代わりにそのファイルの php コードがブラウザーに公開されます。私の知る限り、.shtmlファイルは何にも解釈されないため、これらのファイルに存在しないハンドラーを削除しても何の役にも立ちません。実際、適切に構成されていれば、Apache は.shtmlファイル自体を処理します。これはハンドラーではなく、いくつかの内部オプションによって行われます。ここを参照してください。

あなたがしたいことは、誰かがあなたのファイルに直接アクセスしようとしたときに、HTTP 403: Forbidden エラー コードを送信することです。mod_rewrite( docs )を使用するなど、これを実現する方法がいくつかあります。mod_rewrite が有効になっていることを確認してから.htaccess、ドキュメント ルートに以下を追加します。

#We first need to make sure that we want to rewrite
RewriteEngine on

#Forbid access to all files ending with `.shtml`
RewriteRule \.shtml$ - [F,L]

内部インクルードは mod_rewrite が何をするかを気にしないので、それは問題なく動作します。RewriteRule最初の引数に一致するすべてのリクエストに対して実行されます。2 番目の引数 ( -) は、URL が書き換えられていないことを意味します。このFフラグにより​​、Apache は Forbidden エラーを送信することを認識し、Lフラグにより​​ mod_rewrite はこの書き換えサイクルを停止する必要があることを認識できます。禁止エラーが送信されたときにスクリプトが実行されないため、リクエストが禁止されているときに新しい書き換えサイクルが開始されるとは思いません。

于 2014-06-25T15:09:25.737 に答える