海外サイトの直リンクに対し随時画像を入れ替えていましたが、キリがないので設定しました。
現在はこのコードで直リンク禁止
# NO direct link RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?*****\.com [NC] RewriteCond %{HTTP_REFERER} !google\. [NC] RewriteCond %{HTTP_REFERER} !search?q=cache [NC] RewriteCond %{HTTP_REFERER} !bing\. [NC] RewriteCond %{HTTP_REFERER} !yahoo\. [NC] RewriteCond %{HTTP_REFERER} !msn\. [NC] RewriteCond %{HTTP_USER_AGENT} !(twitter|Twitterbot|facebookexternalhit|hatena) [NC] RewriteRule \.(jpg|jpeg|png|gif|zip|pdf|wepb)$ - [NC,F,L]
注意点
「http://の前には^」「ピリオド . の前に\(バックスラッシュ)」を入れます。「*****\.com」の部分にはご自身のドメインを入力します。
コードの説明
- RewriteEngineを ON
- 自分のサイト、google、yahooなど設定したサイトのみ jpgなどのファイルの表示を許可
- 参照元が自分のサイト、google、yahoo、bing、msnではない場合はファイルの表示を禁止
フラグ
- [NC]→大文字・小文字を区別しない
- [F]→強制的にアクセス禁止「403 Forbidden」
- [L]→書き換えが行われたら終了
jpg だと [F] や [NC] で 403 になりますが、wepb には効き目がなかったので [NC,F,L] を指定しています。
環境によっても異なるかもしれないのでテストしてみると良いです。
アドレスバーに入力した時に画像を表示させたくない場合
この行を削除します。ある意味、右クリック禁止よりも効果的かも。
RewriteCond %{HTTP_REFERER} !^$
SNSで共有された時に画像を反映させたくない場合
この行を削除します。
RewriteCond %{HTTP_USER_AGENT} !(twitter|Twitterbot|facebookexternalhit|hatena) [NC]
直リンクされた時にリダイレクト
1番最後の行をこのコードと置き換えます。一時的なリダイレクトなので302で良いかと。
RewriteRule \.(jpg|jpeg|png|gif|zip|pdf|wepb)$ トップページなど [R=302,L]
直リンクされた時に自動的に別の画像を表示させたい場合
効果絶大ですが、サイトを AMP 対応している場合は注意が必要です。
【AMP】直リンク対策で他の画像にリダイレクトしたらえらい目にあった
SetEnvIfで設定
このコードは反応が鈍くなってしまったので現在は使っていません。
# NO direct link <Files ~ "\.(jpg|jpeg|png|gif|css|js|zip|pdf)$"> SetEnvIf Referer "^http://*****\.com" ok_url SetEnvIf Referer "^https://*****\.com" ok_url SetEnvIf Referer "^http://www\.*****\.com" ok_url SetEnvIf Referer "^https://www\.*****\.com" ok_url SetEnvIf Referer "google" ok_url SetEnvIf Referer "yahoo" ok_url SetEnvIf Referer "bing" ok_url SetEnvIf User-Agent "AmazonAdBot" ok_url SetEnvIf User-Agent "Applebot" ok_url SetEnvIf User-Agent "Baiduspider" ok_url SetEnvIf User-Agent "bingbot" ok_url SetEnvIf User-Agent "Cliqzbot" ok_url SetEnvIf User-Agent "coccocbot" ok_url SetEnvIf User-Agent "facebookexternalhit" ok_url SetEnvIf User-Agent "Googlebot" ok_url SetEnvIf User-Agent "Hatena Antenna" ok_url SetEnvIf User-Agent "istellabot" ok_url SetEnvIf User-Agent "Linespider" ok_url SetEnvIf User-Agent "Mail.RU" ok_url SetEnvIf User-Agent "MojeekBot" ok_url SetEnvIf User-Agent "msnbot" ok_url SetEnvIf User-Agent "Qwantify" ok_url SetEnvIf User-Agent "SeznamBot" ok_url SetEnvIf User-Agent "Sogou" ok_url SetEnvIf User-Agent "Twitterbot" ok_url SetEnvIf User-Agent "Yandex" ok_url SetEnvIf User-Agent "Yeti" ok_url order deny,allow allow from env=ok_url </Files>
Googlebot・各国の検索エンジン、Facebook・Twitterなどは一応OKにしています。
直リンクをされるとエラーログが届くので、こちらの方が分かりやすいと言えば分かりやすい。
[日付] [access_compat:error][pid ~:tid ~] [client IP] AH01797: client denied by server configuration: 画像URL, referer: パクリ元URL
結果
画像を直リンクしようとすると表示されない、もしくは403エラーになります。
たとえば、この海外サイトで直リンクされていましたが、
設定後、私の画像は消え代わりに他の人の画像が表示されました。早く設定しておけば良かった。
5ちゃんねるで画像URLだけ貼られても問題なし。