本日の Twitter が、とある丸パクリブログの話題で賑わっておりました。
事の発端はこちらの Togetter まとめを見てもらえば分かると思いますが、アメブロで「もしも私が総理大臣だったら・・・」というブログを運用してる人が、他の有名ブログのエントリを内容・ソース丸写しで許諾無くコピーして掲載してるようだ…というので各所で問題にされているという話。ひどいですね。涙
ソース丸写しなものですから、エントリ内に書いてある例えば img
要素の src
属性に指定してある URL も、自身のサイトにコピーしたものではなくて元ブログの該当エントリのソース内で指定してあるものになっています。所謂「直リンク」ですね。
そこに気付いた(今回記事丸パクリされた被害者の一人である)Web クリエイターボックスの管理人さんが、ご自身のサイト上にある元画像を、全て別のものに差し替えたという事で、そのパクリエントリがとても面白い事になっている(魚拓)訳でございます(元記事と見比べてみて下さい)これはこれで非常に GJ だなあと思った訳ではございますが。
んで、この画像がどんどん差し替わっていく様子を私は少しリアルタイムで覗いていた訳ですが、どうも手順としては、
- 元 URL の画像を別のものに差し替えた後
- 元の画像を別名でアップロードし直して
- ご自身の記事の該当部分の URL を修正
という順になっているようでして、リアルタイムで見ていると元の Web クリエイターボックスさんのエントリも一部差し替わった画像に替わったままになってる、という状態になっておりまして(当然現在は全て正常な画像に差し替わっておりますが)少しスマートじゃないなあ…などと勝手に思ってた訳です。他のブログの腐った行為のために自身のサイトにも修正を加えるというのは、少し面倒でもありますしね。
元エントリには一切変更を加える事なく、画像を別サイトから直リンクされた場合にアクセス禁止にしたり別画像に差し替えたりは(サーバの仕様にも依りますが).htaccess を書けば割と簡単に出来る訳です。この辺は素材配布サイトなどでは昔から色々対策が練られてますので「直リンク 対策 htaccess」などのキーワードでググれば沢山参考記事が見つかりますが、ざっと見た限りだと直リンクはアクセス禁止にする方法の解説が主な気がしました。
という訳でこのエントリでは、今回のように他のサイトが直リンクで自サイト内の画像を参照をしていた際に、目的の画像じゃなく別の画像を表示させるには…という場合の対処方法に絞って例を書いてみようかなと思います。
例えば自サイト以外からの直リンクを一切禁止する場合ですと、サーバが mod_rewrite に対応しているという前提ではあるのですが、例えば画像を置いているディレクトリが(ブラウザでアクセス出来る最上位からのパスで)/uploads/images/
と仮定します(かつ、このディレクトリより下にはサブディレクトリを置いてないと仮定してます)images
ディレクトリ内に次のような .htaccess ファイルを置きます。
RewriteEngine On
RewriteBase /uploads/images/
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://mydomain.com/ [NC,OR]
RewriteCond %{HTTP_REFERER} !^http://www.mydomain.com/ [NC]
RewriteRule ^(.*)\.(gif|jpg|png)$ /r/$1.$2 [L]
これで自サイト以外から http://(www.)mydomain.com/uploads/images/***.jpg
への要求があった場合には、http://(www.)mydomain.com/r/
ディレクトリ以下に置かれた同名ファイルに差し替わって参照されるようになります。あとはこの /r/
ディレクトリ以下へ差し替えたい画像ファイルをどんどんアップロードしていけばOK。一旦参照されている画像ファイルを /r/
ディレクトリにFTPなどでコピー後、画像ファイルを順次差し替えていけばリンク切れも防ぐ事が出来ますが、丸パクリサイトにそこまでする義務もないでしょう。汗
また事前に対策として、あらかじめ forbidden.jpg というようなファイルを準備しておき、直リンクされた場合はその画像を変わりに表示する、というような場合も、先ほどの最後の行を
RewriteRule ^(.*)\.(gif|jpg|png)$ /r/forbidden.jpg [L]
とすれば出来ますね。
当然どちらのサイトさんも画像をアップロードしているディレクトリは千差万別でしょうから丸々コピーして設置という訳にはいかないでしょうが、あくまでも直リンクへの対策例ということで、修正してご利用いただく上で参考になればと思います。
注意するのはやはり、最後の正規表現の部分を良く分からないままに間違えて書いてしまうと、場合によっては永久ループが発生して Internal Server Error
となってしまい、最悪はサイト自体が閲覧不能になってしまう可能性があるって事でしょうか。なので良く分からない方は最初はごく限られたディレクトリ以下に限定してお試しの上(出来れば mod_rewrite と正規表現について少しお勉強した上)徐々に範囲を変えていくのがよろしいかと。
また当然ながら、このエントリを読んで.htaccessをご自身が設置された事によって発生した不具合に関しては、こちらでは一切責任を負いませんので、設置はあくまでも自己責任という事で一つよろしくお願いしますです。汗