2016-07-24 15 views
0

.htaccessルールを使用して画像ディレクトリへの直接アクセスを防止しています。 .htaccessコード.htaccess:画像がWebページにロードされていません。

Deny from all 

と私はこの.htaccessファイルをイメージディレクトリに配置しました。

問題は、私が画像エラーを読み込めなかった、またはイメージが存在しないと言うことができないウェブページの画像にアクセスしようとしたときです。

<img class="highlight-right wow animated" src="/img/spark.png" height="192" width="48" alt=""> 

私は直接アクセスするユーザーのアクセスを拒否したいが、少なくともウェブページ上で動作するはずです。

これについて助言してください。

編集: 私はこのルールに

RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] 
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC] 

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] 
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] 
RewriteRule \.(gif|jpg|png)$ - [F] 

を試みたが、画像がWebページに表示されていないとの両方が動作していません。

+0

次に、.htaccessの参照元に基づいて条件付きルールを作成する必要があります。これは完璧とはかけ離れており、実際の訪問者をブロックすることができ、クライアントの設定に応じて他の訪問者がアクセスするのを防ぐことはできません。 –

+0

@JuliePelletierご意見ありがとうございます。私は.htaccessにそれほど精通していません。あなたはもう少し説明できますか? – Ironic

+0

@CalculatingMachineすべての外部アクセスをブロックする拒否ルールをそのまま残しておきますが、PHPを使用してファイルに内部的にアクセスします。私の答えを見てください。 – BeetleJuice

答えて

1

次のようにあなたの.htaccessがリファラに基づいて、それらをブロックするように設定できます。

RewriteEngine on 
RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yoursite.com [NC] 
RewriteRule \.(jpg|png|gif)$ http://yoursite.com/errorImage.jpg [NC,R,L] 

注それは、クライアントのブラウザに変更することができるようHTTP_REFERERが信頼できないことが、それは最も単純で最も効率的ですメソッドを利用できます。

より堅牢な方法では、Cookieやセッションを使用する必要がありますが、サーバーの負荷が高くなり、応答時間が短くなります。

+0

あなたの答えをありがとう。 – Ironic

+0

ディレクトリに複数の種類のファイルがある場合は、*を使用できますか? – Ironic

+0

いいえ、あなたのサイトではなくリファラーが空でない場合、私の答えは画像ファイル(jpg、png、gif)の 'errorImage.jpg'を与えるルールを設定します。 –

1

私は直接アクセスしているユーザーのアクセスを拒否したいのですが、少なくとも はウェブページ上で動作するはずです。 .htaccess

1.すべての直接アクセスをブロックするDeny from allルールを使用しています。

2.イメージソースリンクを変更して、正しいイメージを返すPHPスクリプトを参照してください。

<img src="/path/to/images.php?f=spark.png"> 

パラメータにイメージ名をどのように渡したのでしょうか? PHPがどのイメージが要求されているかを知る方法です。 images.phpで行います

$IMG_DIR = '/path/to/images'; //put all protected images here 

$img = $_GET['f']; //the file's name, matches the f= parameter in <img> 

$img_path = $IMG_DIR."/$img"; 
if(!is_file($img_path)){ // make sure this image exists 
    http_response_code(404); //404 not found error 
    exit; 
} 

$extension = pathinfo($img,PATHINFO_EXTENSION); //eg: "png" 
$mimetype = "image/$extension"; //type of image. browser needs this info 
$size = filesize($img_path); 

//tell the browser what to expect 
header("Content-Type: $mimetype"); 
header("Content-Length: $size"); 

//send the file to the browser 
readfile($img_path); 

私はここでそれをしないが、このアプローチは、あなたが望むようにアクセスを制限することができます。たとえば、画像を返すかどうかを決定する前に、ユーザーが$_SESSIONの内容を見てログインしているかどうかをテストできます。

+0

あなたの答えをありがとう。 – Ironic

関連する問題