サーバーで ServerSide Include (SSI) が有効になっています。しかし、私は自分のフォルダで実行したくありません。そのため、.htaccess ファイルを追加して、そのフォルダーで SSI を無効にしたかったのですが、どうすればよいですか? 私は試した
RemoveHandler server-parsed .shtml
しかし、それは機能していません。どうすれば達成できますか?
サーバーで ServerSide Include (SSI) が有効になっています。しかし、私は自分のフォルダで実行したくありません。そのため、.htaccess ファイルを追加して、そのフォルダーで SSI を無効にしたかったのですが、どうすればよいですか? 私は試した
RemoveHandler server-parsed .shtml
しかし、それは機能していません。どうすれば達成できますか?
まず第一に、あなたの使用はRemoveHandler
意味がありません。ドキュメントによると、構文は ですRemoveHandler extension [extension] ...
。つまり、で終わるファイルのハンドラーを.shtml
削除するだけでなく、で終わるファイルのハンドラーも削除しますserver-parsed
。
ハンドラーは、特定のファイルについて、ユーザーに直接送信するのではなく、他のプログラムによって解釈される必要があることを Apache に伝える方法です。たとえば、末尾が for のファイルのハンドラーは、.php
最初に php パーサーを介してファイルを送信します。このハンドラーを削除すると、代わりにそのファイルの php コードがブラウザーに公開されます。私の知る限り、実際、適切に構成されていれば、Apache は.shtml
ファイルは何にも解釈されないため、これらのファイルに存在しないハンドラーを削除しても何の役にも立ちません。.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 はこの書き換えサイクルを停止する必要があることを認識できます。禁止エラーが送信されたときにスクリプトが実行されないため、リクエストが禁止されているときに新しい書き換えサイクルが開始されるとは思いません。