PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > PowerCMS 3 > 会員サイトの画像やPDFにログイン認証をかける

2012年11月09日

会員サイトの画像やPDFにログイン認証をかける

PowerCMSの会員限定サイト機能では、HTMLファイル内にMTタグを記載してログイン状態による出力の分岐を行います。

<mt:DynamicMTML>
<mt:ifLogin>
    ユーザーがログインしている時に出力
<mt:else>
    ユーザーがログインしていない時に出力
</mt:ifLogin>
</mt:DynamicMTML>

以下のテンプレートでは、ログインしている時にはプロフィールの編集画面へのリンク(リンクテキストはユーザーの表示名)、そうでない時にはログイン画面へのリンクを出力します(PowerCMS Professional以上が必要)。

<mt:DynamicMTML>
<mt:ifLogin>
    <a href="<$MTCGIPath$><$MTMembersScript$>?blog_id=<mt:BlogID>?__mode=edit_profile">
        <mt:AuthorDisplayName escape="html">
    </a>
    さん、ようこそ
<mt:else>
    <a href="<$MTCGIPath$><$MTMembersScript$>?blog_id=<mt:BlogID>">ログインしてください</a>
</mt:ifLogin>
</mt:DynamicMTML>

拡張子htmlを.mtview.php で処理させる .htaccess

Options -Indexes +SymLinksIfOwnerMatch
DirectoryIndex /path/to/blog/.mtview.php
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_FILENAME} -d [OR]
  RewriteCond %{REQUEST_FILENAME} ^[^.]+$|\.html$ [NC]
  RewriteRule ^ /path/to/blog/.mtview.php [L]
</IfModule>
php_flag short_open_tag off

テキストファイル以外のファイルにログイン認証をかけるプラグイン

.htaccess で HTML ファイルを.mtview.php で処理するように mod_rewrite のルールを定義している時、HTMLファイル内では上記のようにテンプレート処理できますが、サイトによっては添付した画像やファイルのURLを直接指定した時にもログイン状態をチェックし、ログインしていなければ閲覧制限をかけたいといったケースがあると思います。

以下のファイルをダウンロードし、Membersプラグイン配下のphpディレクトリに設置してください (このファイルは次期リリースに標準で含まれる予定です。このファイルは PowerCMS 3.16 以降に含まれています。PowerCMS Professional以上が必要です)。このプラグインによって、 .mtview が処理する(Contents-Typeが text/foo でないファイル) へのアクセス時にログインしていないユーザーはログイン画面にリダイレクトさせられるようになります。

サイトパス以下をすべて .mtview.php で処理させることでサイト全てに閲覧制限をかけることができますが、CSSやJavaScript、デザイン用の画像データ等すべてに .mtview.php の処理がかかってしまうため、サイトの負荷的に望ましくありません。この設定の肝は、閲覧制限をかけたい条件に合致する場合のみ .mtview.php が処理を行うようにする、ということです。以下に.htaccessのパターンをいくつか紹介します。

拡張子html|pdf|jpeg|jpg|gifを対象にする.htaccess

Options -Indexes +SymLinksIfOwnerMatch
DirectoryIndex /path/to/blog/.mtview.php
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-f [OR]
  RewriteCond %{REQUEST_FILENAME} -d [OR]
  RewriteCond %{REQUEST_FILENAME} ^[^.]+$|\.(html|pdf|jpeg|jpg|gif)$ [NC]
  RewriteRule ^ /path/to/blog/.mtview.php [L]
</IfModule>
php_flag short_open_tag off

CSSとJavaScriptを対象外とする.htaccess

Options -Indexes +SymLinksIfOwnerMatch
DirectoryIndex /path/to/blog/.mtview.php
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(?:.(?!\.(?:cs|j)s$))*$ /path/to/blog/.mtview.php [NC,L]
</IfModule>
php_flag short_open_tag off

commonディレクトリ以下を対象外にする

Options -Indexes +SymLinksIfOwnerMatch
DirectoryIndex /path/to/blog/.mtview.php
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(?!common/)$ /path/to/blog/.mtview.php [L]
</IfModule>
php_flag short_open_tag off

commonディレクトリ以下及びCSSとJavaScriptを対象外とする.htaccess

Options -Indexes +SymLinksIfOwnerMatch
DirectoryIndex /path/to/blog/.mtview.php
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(?!common/)(?:.(?!\.(?:[Cc][Ss]|[Jj])[Ss]$))*$ /path/to/blog/.mtview.php [L]
</IfModule>
php_flag short_open_tag off

imagesディレクトリ以下を対象とする.htaccess

Options -Indexes +SymLinksIfOwnerMatch
DirectoryIndex /path/to/blog/.mtview.php
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^images/ /path/to/blog/.mtview.php [L]
</IfModule>
php_flag short_open_tag off

カテゴリー
DynamicMTML
PowerCMS 3
技術情報

Recent Entries