PDF等閲覧制限 特定ページ経由からのみ閲覧可能に【PHP・htaccess】

pdf%e7%ad%89%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%ae%e9%96%b2%e8%a6%a7%e5%88%b6%e9%99%90%e3%80%80%e7%89%b9%e5%ae%9a%e3%83%98%e3%82%9a%e3%83%bc%e3%82%b7%e3%82%99%e7%b5%8c%e7%94%b1%e3%81%8b

PDFをウェブサイトに置いてユーザーに閲覧させたいけど、特定のページを経由しないと見れないようにしたい」

こんな依頼を受けることが結構あります。

この要望が必要な場面は、

  • 利用規約ページは必ず見て欲しい
  • ユーザーに何らかアクションをしてもらった特典としてPDFを閲覧してもらいたい

などが挙げられますね。

毎回どうやって作ったか思い出しながらやっているので、今日は備忘録として上記要望の実装方法をまとめます。

PHPと.htaccessを利用してPDFの閲覧を制限する

閲覧制限といっても、閲覧するためにIDやパスワード求めるわけではなく、特定ページ経由のときにのみPDFが表示されるようにする仕様です。

通常ウェブサイトにPDFを置いて閲覧させる場合は、下図のようにHTMLにPDFへのリンクを設置して、ユーザーがクリックするとPDFが表示されるようにしますよね。

00%e3%83%a6%e3%83%bc%e3%82%b5%e3%82%99%e3%83%bc%e3%81%8b%e3%82%99%e3%82%af%e3%83%aa%e3%83%83%e3%82%af%e3%81%99%e3%82%8b%e3%81%a8pdf%e3%81%8b%e3%82%99%e8%a1%a8%e7%a4%ba%e3%81%95%e3%82%8c%e3%82%8b

ただ、このままでは誰でも閲覧できる状態です。
ここに制限を設けます。

仕様としては、

  • PDFはURL直接入力や直リンクで閲覧できないように.htaccessを利用して閲覧を制限する
  • 特定のページからのアクセスの場合のみ、PDFを表示する

となります。

実装方法

使用するファイルは下記の4つです。

01%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8b%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%af%e4%b8%8b%e8%a8%98%e3%81%ae4%e3%81%a4%e3%81%a6%e3%82%99%e3%81%99

  • .htaccess – PDFへの直接アクセスを制御
  • checkPermission.php – 特定ページからのアクセスかを判断。OKの場合PDFを出力。
  • index.php – PDFへのリンクを貼る画面
  • test.pdf – 表示するPDF

※今回は同階層にすべて置いてあります。

これらのファイルを用い、下図のような仕組みを実装します。

02%e3%81%93%e3%82%8c%e3%82%89%e3%81%ae%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e7%94%a8%e3%81%84%e3%80%81%e4%b8%8b%e5%9b%b3%e3%81%ae%e3%82%88%e3%81%86%e3%81%aa%e4%bb%95%e7%b5%84%e3%81%bf%e3%82%92

今回使ったコードをまとめていきます。

.htaccess – PDFへの直接アクセスを制御

まずは.htaccessを利用してPDFへのアクセスを拒否します。

今回はPDFの制御をしましたが、別のファイルを制御することも可能です。

●●●の部分をtxtなど別の拡張子にします。

ブラウザに直接PDFへのURLを入力して確認します。

表示できていたPDFが”Forbidden”となっていれば正しく動作しています。

03%e3%83%95%e3%82%99%e3%83%a9%e3%82%a6%e3%82%b5%e3%82%99%e3%81%ab%e7%9b%b4%e6%8e%a5pdf%e3%81%b8%e3%81%aeurl%e3%82%92%e3%81%86%e3%81%a3%e3%81%a6%e7%a2%ba%e8%aa%8d%e3%81%97%e3%81%be%e3%81%99

index.php – PDFへのリンクを貼る画面

次にPDFへのリンクを設置するページの作成をします。
ここではPHPでセッションを開始し、$_SESSION[‘permission’]に’true’という文字列を持たせます。

この’true’が設定されているかどうかがこの後の判断材料となります。

リンク先は特定ページからのアクセスかを判断するPHPにしておきましょう。

checkPermission.php – 特定ページからのアクセスかを判断。OKの場合PDFを出力。

index.php内のリンク先がこのPHPファイルになります。

$_SESSION[‘permission’]に’true’が入っているかを確認し、入っている場合はPDFを出力します。
ここではPDFは同階層にあるtest.pdfを想定しています。

$_SESSION[‘permission’]に’true’が入っていない場合はelse内の対処になります。
“//不正アクセスの場合の対処を記述”の部分にはお好きな処置を書いてください。

もし、PDFを出力するのではなく、ダウンロードさせたい場合は、

に差し替えてください。

ただ、この対応の場合はPC以外のスマートフォンなどではエラーになってしまいますのでお気をつけください。

まとめ

以上で、「PDFをウェブサイトに置いてユーザーに閲覧させたいけど、特定のページを経由しないと見れないようにしたい」という要望のプログラムの実装が完了です。

同じような案件でお役に立てば幸いです。

筆者について

筆者について


1982年、東京下町生まれ。
高校卒業後、アメリカへ留学。その後、「アートが根付いた国では絵だけで食えるのか」を確認するため、ドイツベルリンにてアート活動をおこなう。

日本に戻ってからは、コーディング・オーサリング・プログラミングなんかを経て、ウェブディレクターを肩書きにしておりました。現在は独立し、ブログやサイトの運用を軸に、ウェブサイトの企画提案からデザイン・構築まで手広く活動しております。何でも屋です。

isLog〜イズログ〜では『日々生きること自体が旅』をモットーに、日々の旅を中心に綴っています。

詳しいプロフィールはこちら


feedly

コメントを残す

*