直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明
2017/03/11
.htaccessをPHPで解説するシリーズ・直リンク禁止
直リンクを禁止する.htaccessをPHPで解説
「コピーコンテンツ対策.htaccessで直リンク禁止しリダイレクトで対応」で直リンク禁止の対応を .htaccessで行う方法を解説しました。
この解説記事を書くに当たって、勉強をするためにあちこちのサイトを見て .htaccessの理解をしようとしましたが、イマイチ理解が進みませんでした。
「何でこんなにどのサイトの説明も分かりにくいのだろう?」と考えていて思い至ったのは
日本語で説明してあるから!
と言うことでした。
私は日本人ですし英語はまるで分からないので、日本語じゃなければ英語なら分かるのか?と言われても困りますが、プログラムの説明を日本語で書いても分かりやすくなるとは言えない、ということが分かりました。
そんなわけで、.htaccessの説明を、「日本語」ではなくプログラム言語の「PHP」に置き換えて説明してみることにしました。
だって、Webプログラマですからね。
置き換える言語は日本語よりも PHPの方がいいんじゃね?って。
自分で PHPに置き換えて見たら、.htaccessもすんなり理解できましたから!
ちなみに、あちこちサイトを見ましたけども、検索にヒットする記事はそこそこの数はあるわけですが、書いてある中身は元のどこかの記事を単にテキストの字面を変えただけというほぼコピーコンテンツもいっぱいあります。
そして、書いている本人は理解していないんじゃないかなぁって思える記事も多いので、実際の解説のバリエーションがそんなに多くないことも理解が進まない理由のひとつなんだろうなぁ、とも感じました。
実際問題として、もともとの記事にバグがあって正常に動かないのに、それをそのまま試しもせずに記事にしてるから、不具合もそのままになっている記事もよく見かけますからね。
ちなみに、直リンクを禁止する記事で、「SetEnvIf」にセットする値が「ShowOK」なのは、下記の All Aboutが元記事になっているんじゃないでしょうかね?
http://allabout.co.jp/gm/gc/23915/3/
.htaccessで直リンクを禁止する設定・許可を指定する場合
1 2 3 4 5 6 7 |
<Files ~ "\.(gif|png|jpg)$"> SetEnvIf Referer "^http://blog\.s-giken\.net" OK SetEnvIf Referer "^$" OK order deny,allow deny from all allow from env=OK </Files> |
「コピーコンテンツ対策.htaccessで直リンク禁止しリダイレクトで対応(指定したサイトからの直リンクを.htaccessで禁止する)」でも解説しましたが、直リンクに対して画像の表示を禁止する .htaccessは上記のように記述します。
この記述を .htaccessに記述し、ドキュメントルートに置けばサイト内の画像全てを対象にして直リンクを禁止することが出来ます。
で、上記の .htaccessの記述内容を解説していきます。
もともとの解説記事ではこれの説明を日本語で行ったわけですが、解説をしていて思うのは、不足はしていないものの .htaccessの仕組みが分かっていない方が理解するには足りないんだろうな、と感じるのです。
そんなわけで、ここではそれを PHPに置き換えて説明するという試みをしてみました。
.htaccessで直リンクを禁止する設定を PHPで説明・許可を指定する場合
SetEnvIf Referer "^http://blog\.s-giken\.net" OK
1 2 3 4 5 6 7 8 |
【.htaccess】 SetEnvIf Referer "^http://blog\.s-giken\.net" OK 【PHP】 if ( $_SERVER["HTTP_REFERER"] == "^http://blog\.s-giken\.net" ) { $Env = "ShowOK"; } |
※「"^http://blog\.s-giken\.net"
の部分は正規表現でのマッチングの処理ですので、単なる「==」ではなく「preg_match」の方が正確だとは思います(下記のような感じ)。
1 2 3 |
if ( preg_match ( "/^http://blog\.s-giken\.net/", $_SERVER["HTTP_REFERER"] ) { $Env = "OK"; } |
SetEnvIf Referer "^$" OK
1 2 3 4 5 6 7 8 |
【.htaccess】 SetEnvIf Referer "^$" OK 【PHP】 if ( $_SERVER["HTTP_REFERER"] == "^$" ) { $Env = "OK"; } |
そして、続きの行もこんな感じで、マッチしたら「$Env」に「OK」を代入していくと言う処理ですので、複数の条件を設定したい場合は単純に行を増やしていけばいいことが分かります。
allow from env=OK
1 2 3 4 5 6 7 8 9 10 11 12 |
【.htaccess】 order deny,allow deny from all allow from env=OK 【PHP】 if ( $Env == "OK" ) { allow; //←ここは「許可」という意味 } else { deny; } |
ここでは、最初の処理で「$Env」に代入した値をチェックし、それによって許可するか、否かの判定をしているイメージです。
allowの部分は、.htaccessの処理として「許可する」と言う処理の部分ですので、PHPに置き換えようが内容に感じます。
また、「deny from all」で「deny(拒否)」を基準として設定していますので、「else」の場合は「deny」になると言う感じでしょうか。
.htaccessで直リンクを禁止する設定・拒否を指定する場合
1 2 3 4 5 6 |
<Files ~ "\.(gif|png|jpg)$"> SetEnvIf Referer "^http://xxx\.xxx\.xxx" NG order allow,deny allow from all deny from env=NG </Files> |
今度は、拒否するサイトを指定する場合の設定を解説していきましょう。
.htaccessで直リンクを禁止する設定を PHPで説明・拒否を指定する場合
SetEnvIf Referer “^http://xxx\.xxx\.xxx” NG
1 2 3 4 5 6 7 8 |
【.htaccess】 SetEnvIf Referer "^http://xxx\.xxx\.xxx" NG 【PHP】 if ( $_SERVER["HTTP_REFERER"] == "^http://xxx\.xxx\.xxx" ) { $Env = "NG"; } |
処理の内容は前項の許可するサイトを指定する方法と同じです。
ただ、こちらでは拒否するサイトを指定するため「$Env」に代入する値を「NG」にしている程度です。
これについては、前項でも説明していますが、単なる代入する値ですので、「OK」のままでも何にも問題ありません。
deny from env=NG
1 2 3 4 5 6 7 8 9 10 11 12 |
【.htaccess】 order allow,deny allow from all deny from env=NG 【PHP】 if ( $Env == "NG" ) { deny; } else { allow; } |
この処理も許可するサイトを指定する方法と何の違いもありません。
「$Env」に代入している値が変わっていますので、IF文で聞く値も変わっている程度です。
.htaccessをPHPで解説するシリーズ・直リンク禁止のまとめ
.htaccessの処理を PHPに置き換えてみる試みはいかがでしたでしょうか?
PHPに書き直してみると .htaccessも全然難しくないことが分かってもらえたのではないでしょうか?
.htaccessは多様で、しかも強力な処理を構築することが出来ますので便利なのですが、いかんせん分かりやすく説明してくれているサイトがなかなかないため難しく感じてしまいますが、今後は他の処理も PHPなど他の言語に置き換えてみて解説をしていって見たいと思います。
こうご期待!
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
mod_pagespeedでWebサイトを超簡単高速化・Google謹製の最終兵器
Webサイトの表示スピード高速化の最終兵器、Google謹製mod_pagespeedの解説です。レンタルサーバではX-Serverでしか利用できませんが、ワンクリックで高速化します。
-
Selenium WebDriver、Pythonをインストールし Chromeの自動操作の環境構築手順のまとめ
Selenium WebDriverを使ってChromeを自動操作する環境を構築する手順のまとめ。使用するPythonのインストールから、サンプルスクリプトの動作確認までを詳細解説。
-
本当に?GMO系ロリポップ・ヘテムルを無料で運用する方法があった!
ロリポップ、ヘテムルを株主優待を利用して実質無料で運営しよう!という解説記事です。株主優待で提供されるサービスの内容を解説し、無料になる仕組みを解説します。
-
.gitignoreを更新しても反映されないときは「git rm -r –cached .」でキャッシュを削除
gitの.gitignoreを変更しても記述内容が反映されない時がある。それはGitのキャッシュが残っているため。そんなときは「git rm」コマンドを使ってキャッシュを削除すれば解決する。
-
直リンクとは何か?直リンクとディープリンクの違いと著作権問題
直リンクは著作権違反なのか?議論の前にまず「直リンク」の意味を正しく理解しよう。直リンクは他のサイトの画像を読み込む、ディープリンクなど多様な意味がある。
-
Beautiful Soupを利用してPythonでスクレイピングを行う環境構築方法の解説
BeautifulSoupはPythonでスクレイピングを行う際に便利なツール。インストール方法も簡単。ただ、事前にpipのインストールが必要でその解説もしてます。
-
.htaccessのmod_deflateでファイル圧縮送信で高速化でSEO対策!
Page Speed Insightsの指摘事項であるファイルの圧縮送信の対応方法。処理内容の解説もあるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!
-
.htaccessのmod_expiresでブラウザキャッシュで高速化でSEO対策!
Page Speed Insightsの指摘事項のファイルのブラウザキャッシュの設定方法。解説もしてるけど、.htaccessにコピペするだけの簡単設置で効果抜群!SEOにも威力を発揮!
-
Apacheの起動しているかの確認方法と起動、再起動、終了のコマンド
Apacheが起動しているかを確認する方法の解説に加え、Apacheの起動、停止、再起動のコマンドを解説。再起動のコマンドには restart、condrestart、reload、gracefulがあり、違いを解説。
-
ロリポップからX-Serverに引越し。サーバの月額費用が増えても求めた理由は?
ロリポップからX-Serverに引越すその理由とは?SEOの観点からも少しでもサーバレスポンスが早いサーバが求められロリポップでは限界を感じたからです。