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
コメントを投稿する