WordPressを使われているので、mod_rewriteが利用できると想定してのことですが、SetEnvIfではなく、下記のようにmod_rewriteで.htaccessを書くと如何でしょうか?
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
3行目でアドレスを定義していますが、リファラにこのアドレスが含まれていれば画像が表示されます。
httpsで呼ばれた時なども考慮しており複雑になっていますが、複数のアドレスで許可する場合は、同じ要領で複数書いて下さい。
画像を他のサイト上で画像URLを引っ張った時に表示されないのではなく、
画像のURLを直接叩いた時に表示されない方法です。
つまり、画像を引っ張るサイトのアドレスは書いて下さい。
redcocker様
ご返信ありがとうございます。
説明不足だったようで、失礼いたしました。
画像のファイル名は、だいたいの方がある一定の法則に基づいて
決めておられるかと思うのですが、私もそうでして、
例えば
http://www.exsample.com/wp/wp-content/uploads/2012/02/100a.jpg
という画像があったとします。
この画像のURLを知ると、
http://www.exsample.com/wp/wp-content/uploads/2012/02/100b.jpg
も存在するのではないか?と
推測された時、
ブラウザのアドレスバーに
http://www.exsample.com/wp/wp-content/uploads/2012/02/100b.jpg
と直接アドレスを叩かれてしまうと、
本来見せたくないものであるにも関わらず
見えてしまうことを防ぎたいのです。
これを防ごうとして、
<Files ~ “\.(png|jpg|gif)$”>
SetEnvIf Referer “http://exsample.com/” OK
order deny,allow
deny from all
allow from env=OK
</Files>
の.htaccessをWPがインストールされているディレクトリ直下に
置いたところ、PCとスマホでは狙い通り
画像のURLを一部改変しても表示されなくなりましたが、
携帯(ktai style)ではどの画像も表示されなくなってしまいました。
それがとても不思議だったのですが、
ktai styleはどこか違うディレクトリを参照しているので
http://exsample.com/ ではないアドレスを記載すれば解決するのでしょうか?
その場合は、リファラが空の場合を抜けば良いだけかと思います。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
SetEnvIfの記述が分からないので正確なことは言えませんが、ktai styleで画像が表示されない件は、記述が間違っていると言うより、何らかの理由でリファラが空になっていることが原因である可能性があります。チェックしているのはリファラなのでディレクトリは関係ありません。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
で、OKならば、リファラが空になっていることが原因でしょう。
この様なことは起こりえますし、それがリファラを使ったコントロールの限界かと。
redcocker様
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
と書くと、
やはりPC、スマホでは画像のアドレスを直接入力しても
403エラーになってくれますが(狙い通り)、
携帯では画像を読み込まなくなってしまいます。
空のリファラを許可するコードを追加すると
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC]
RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]
携帯から画像が見られるようになりますが、
PC、スマホで画像のアドレスを直接入力すると
見られる状態に戻ってしまいます。
勉強不足で、理解ができず
何度もお手間をおかけしまして恐縮です。
リファラ以外の方法を探してみようかと思います。