これがシナリオです。
index.php
ファイルがありますincludes
フォルダーにあるindex.php
に含まれています。submit.php
)がフォーム送信アクションのルートフォルダにあります。Htaccessでincludes
フォルダー内のファイルへの直接ユーザーアクセスを制限したいです。 submit.php
の場合も同様です。しかし、includeはindex.php
ファイルに対して機能します。同様に、ユーザーがwww.domain.com/includes/somepage.php
をタイプした場合、それを制限します(エラーページにリダイレクトされるかもしれません)。
includes
フォルダをweb-rootの外に移動するだけですが、includes
フォルダ全体への直接アクセスをブロックしたい場合は、そのフォルダに.htaccess
ファイルを追加します。
deny from all
この方法ではそのフォルダからファイルを開くことはできませんが、問題なくphpに含めることができます。
これは純粋なmod_rewrite
ベースのソリューションです。
RewriteRule ^(includes/|submit\.php) - [F,L,NC]
URIが/includes/
または/submit.php
のいずれかを含む場合、これは使用することを禁じられたエラーを示すでしょう
Filesディレクティブを使用してすべてのファイルへのアクセスを許可しないでアクセス可能なファイルを設定することが可能です。
<Files ~ "^.*">
Deny from all
</Files>
<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
Allow from all
</Files>
1ライナーmod_aliasベースのソリューション:
RedirectMatch 403 ^/folder/file.php$
これは/folder/file.phpの禁止エラーを表示します
私が正しく理解しているなら、あなたは単にincludesフォルダへのアクセスを拒否したいですか?
Includesフォルダに置かれた 'DENY FROM ALL'ディレクティブを持つ.htaccessがうまくいくでしょう。
あなたのQは2つの部分に分かれています、jeroenとanubhavaの両方の解決策はパートIのために働きます - /includesへのアクセスを拒否します。 anubhavaもパートIIのために働きます。私はとにかくDOCROOT/.htaccess
を使用していて、そのような制御をすべて1つのファイルに保存しているので、私は後者を好みます。
しかし私が議論したかったのは「submit.php
へのアクセスを拒否する」という概念です。もしあなたがsubmit.php
を使いたくないのなら、どうしてそれをDOCROOTに入れないのでしょうか。ここでの答えは、あなたがいくつかのフォームでアクションターゲットとしてそれを使用していて、フォームが直接送信されるのではなくフォームが送信されたときにのみ起動されることを望んでいることです。スパムロボットから。
もしこれが本当なら、あなたのフォームが失敗する原因となるのであなたはanubhavaのパートIIを使うことはできません。ここでできることは、(i)参照元が自分のインデックスページであることを確認するための.htaccess
チェックです。
RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC]
RewriteRule ^submit\.php$ - [F]
そして(ii)あなたのPHP index.phpフォームジェネレータの中にはタイムスタンプと検証のための隠しフィールドが含まれています。検証は、たとえば、タイムスタンプのMD5の最初の10文字と内部の秘密などです。送信の処理時に、(i)タイムスタンプと検証が一致していることを検証し、(ii)タイムスタンプが現在時刻から15分以内であることを確認できます。
これにより、スパマーが有効なタイムスタンプと検証のペアを取得できる唯一の実用的な方法は、フォームを解析することですが、このスクレープは15分の寿命しかありません。
より高いレベルで設定されている他の可能なオプションによっては、includesディレクトリの.htaccessファイルに以下を入れる必要があるかもしれません。
Satisfy all
Order deny,allow
Deny from all
上のディレクトリが次の行を含む基本認証を定義したとき、私はこれに遭遇しました:
Satisfy any
これは、ユーザーが認証されたために、私の拒否をすべての人に反映させることを妨げていました。
.htaccess
ファイルに以下のコマンドを追加することができます。
Deny from all
ErrorDocument 403 "nothing is here"
不正アクセスの場合は、「ここには何もありません」というメッセージが表示されます。
エラーコードによって特定のページにリダイレクトしたい場合は、次のようにコマンドを定義できます。
ErrorDocument 404 "/errors/404.html"
これは/errors/404.html
にリダイレクトし、カスタムページが見つからないという画面を表示します。