1

画像用のフォルダーがある Web サイトがあります。

2 つの問題があります。

  1. そのディレクトリでのすべてのスクリプトの実行を無効にしたい (つまり、PHP/Perl/Python を何も無効にしたい)。
  2. 私の画像フォルダーには、gradient.php と rgba.php という 2 つの php ファイルがあります。通常どおり実行します。

.htaccessそれを行うためにファイルを設定するにはどうすればよいですか。また、新しいディレクトリを images ディレクトリに配置するのではなく、.htaccessこれらのディレクティブをサイト ルートのディレクトリに組み込むことは可能ですか?

4

1 に答える 1

3

これらのルールをサイト ルートの htaccess ファイルに追加できます。

# check if the request is for the images folder
RewriteCond %{REQUEST_URI} ^/images/

# check that it isn't a request for an image
RewriteCond %{REQUEST_URI} !\.(jpe?g|png|gif|bmp)$ [NC]

# check that it isn't a request for the 2 ok php files
RewriteCond %{REQUEST_URI} !^/images/(gradient|rgba)\.php$

# forbid access
RewriteRule ^ - [L,F]

これにより、/images/そのリクエストが jpg/jpeg/png/gif/bmp (または正規表現に追加したい他の拡張子) で終わらない、gradient.phpまたはそうでない場合rgba.php、403 禁止になります。


編集:

私はそれらが禁止されるのではなく、実行されないようにしたいだけです – これはアップロード フォルダーなので、誰かが私が検出していない密かに PHP コードである JPG をアップロードした場合、それが検出されないことを基本的に望んでいます。走る

jpg やその他の画像が ( 経由でAddType image/jpeg .jpg) 正しい MIME/タイプにマップされている限り、それは php ハンドラに渡されず、そこにあるコードは実行されません。デフォルトのハンドラーを使用してすべてのファイルを提供する場合AddHandler default-handler phpは、images ディレクトリの htaccess ファイルに設定する必要があります。次に、グラデーション ファイルと rgba ファイルを別のディレクトリに移動する必要があります。htaccess ファイルからハンドラーを選択的に設定することはできませんが、<Location>ブロックを使用して vhost 構成でハンドラーを設定できる場合があります。


編集2:

私は間違っていました。Hフラグを使用して、ルールを使用してカスタム ハンドラーを設定できます。したがって、上記のルールでは、 の代わりに[L,F][L,H=default-handler]画像ではないもの、またはgradient.phpデフォルトrgba.phpハンドラに送信されるものはすべて、デフォルト ハンドラに送信されるようにすることができます (たとえば、php ファイルはそのまま送信され、mod_php によって処理および実行されません)。 .

したがって、次のことができます。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/images/(gradient|rgba)\.php$
RewriteRule ^ - [L,H=default-handler]
于 2012-10-26T19:44:54.763 に答える