これらのルールをサイト ルートの 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]