3「PDFをウェブサイトに置いてユーザーに閲覧させたいけど、特定のページを経由しないと見れないようにしたい」こんな依頼を受けることが結構あります。利用規約ページは必ず見て欲しいユーザーに何らかアクションをしてもらった特典としてPDFを閲覧してもらいたいなどが挙げられますね。毎回どうやって作ったか思い出しながらやっているので、今日は備忘録として上記要望の実装方法をまとめます。特定ページからのアクセスかを判断。OKの場合PDFを出力。まとめPHPと.htaccessを利用してPDFの閲覧を制限する閲覧制限といっても、閲覧するためにIDやパスワード求めるわけではなく、特定ページ経由のときにのみPDFが表示されるようにする仕様です。通常ウェブサイトにPDFを置いて閲覧させる場合は、下図のようにHTMLにPDFへのリンクを設置して、ユーザーがクリックするとPDFが表示されるようにしますよね。このままでは誰でも閲覧できる状態です。ここに制限を設けます。仕様としては、PDFはURL直接入力や直リンクで閲覧できないように.htaccessを利用して閲覧を制限する特定のページからのアクセスの場合のみ、PDFを表示するとなります。使用するファイルは下記の4つです。特定ページからのアクセスかを判断。OKの場合PDFを出力。表示するPDF※今回は同階層にすべて置いてあります。これらのファイルを用い、下図のような仕組みを実装します。今回使ったコードをまとめていきます。PDFへの直接アクセスを制御まずは.htaccessを利用してPDFへのアクセスを拒否します。all</Files>今回はPDFの制御をしましたが、別のファイルを制御することも可能です。all</Files>●●●の部分をtxtなど別の拡張子にします。ブラウザに直接PDFへのURLを入力して確認します。表示できていたPDFが”Forbidden”となっていれば正しく動作しています。次にPDFへのリンクを設置するページの作成をします。ここではPHPでセッションを開始し、$_SESSION[‘permission’]に’true’という文字列を持たせます。target="_blank">こちら</a>からPDFをダウンロードできます</p>この’true’が設定されているかどうかがこの後の判断材料となります。リンク先は特定ページからのアクセスかを判断するPHPにしておきましょう。特定ページからのアクセスかを判断。OKの場合PDFを出力。index.php内のリンク先がこのPHPファイルになります。$_SESSION[‘permission’]に’true’が入っているかを確認し、入っている場合はPDFを出力します。ここではPDFは同階層にあるtest.pdfを想定しています。"/test.pdf");}else{//不正アクセスの場合の対処を記述}?>$_SESSION[‘permission’]に’true’が入っていない場合はelse内の対処になります。“//不正アクセスの場合の対処を記述”の部分にはお好きな処置を書いてください。filename=test.pdf");に差し替えてください。この対応の場合はPC以外のスマートフォンなどではエラーになってしまいますのでお気をつけください。まとめ以上で、「PDFをウェブサイトに置いてユーザーに閲覧させたいけど、特定のページを経由しないと見れないようにしたい」という要望のプログラムの実装が完了です。同じような案件でお役に立てば幸いです。*メールアドレス(公開はされません。筆者(ishikawa)プロフィールウェブサイト制作・ブログ運営などをおこなうフリーランス。仕事関係ではウェブの世界にどっぷり浸かっているが、趣味はアウトドア。〜イズログ〜旅行・旅先でのグルメ情報を中心に綴る雑記ブログ。FISH釣りや釣った魚を調理して食べる釣り飯をメインにキャンプなどのアウトドアについて綴るブログ。大切な人や自分へのプレゼント・ギフトに、オモイを伝えられる素敵なモノを紹介・販売しています。無料で使えるウェブツール集。随時追加していきます。当ブログに掲載するコンテンツ(テキスト、画像等)を無断に複製・転用することを禁止します。