PowerCMS™
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[新着情報] PHP 8.2 に対応した PowerCMS 6.5 の提供を開始 を追加しました。
[新着情報] PowerCMSクラウド の月額費用を、2024年7月1日より価格改定します を追加しました。
[新着情報] アルファサードのゴールデンウィーク休業について を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > サポート > フォーム(ContactForm)をSSL化する

2014年03月05日

フォーム(ContactForm)をSSL化する

ContactFormで作成したフォームをSSLで運用する方法について、よく問い合わせいただいています。
ContactFormをSSL化して動作させる方法を説明します。

※ContactFormでの実現方法であり、ExtraFormに関してではありません。
※サイトコンテンツは、HTTP・HTTPSのどちらでも同じURLで表示出来る様になっているものとします。

ContactFormでは次のようにHTMLを出力するようになっています。

  • 初期ページはContactFormを出力するMTMLタグ(カスタムフィールドの種類を「フォーム」としたものなど)を処理した結果が静的にビルドされて出力される
  • 確認画面は「フォームの設定」で「テンプレート」として選択したテンプレートの内容を、mt-contactform.cgiが動的にビルドして表示される
  • 完了画面は「フォームの設定」で「遷移先URL」が指定されていない場合、確認画面と同じく「フォームの設定」で「テンプレート」として選択したテンプレートの内容を動的にビルドして表示される

時々問い合わせをいただく「確認画面が真っ白になる」という状態の原因は、「フォームの設定」で「テンプレート」で表示に利用するテンプレートが選択されていないことが原因になります。

HTMLに読み込まれているファイルのURLを調整する

SSL領域にHTMLを置く場合の注意点としては、そのHTMLから読み込まれる画像はJS、CSSなどのファイルが同じくSSL領域に置かれている必要がある点です。
上記の対応には、読み込み指定ファイルのURLで、同じくSSL領域にあるファイルに対するものとする必要があり、以下の2つの方法で対応可能です。

URLをhttpsから始まるものに変更する

<img src="https://www.powercms.jp/common/images/head_logo_PowerCMS.gif" />

相対パス(ルート相対パス)指定に変更する

<img src="/common/images/head_logo_PowerCMS.gif" />

方法としてはどちらでも問題無いですが、ヘッダーやフッターで共通に利用しているファイルに対しても書き換えが必要なことを考えると、相対パス指定にした方が通常のページに対しても共通で使えるので良いと思います。
一つ一つ書き換えるのは面倒ですし、テンプレートタグで出力するものもあるので、書き換え処理はグローバルフィルタのreplaceやregex_replaceを使って処理をします。

<MTFor replace="http://www.powercms.jp/","/">
書き換えたいテンプレート部分
</MTFor>

注意点としては、上記を行なうとURLすべてが置き換わってしまうので、変更したくない箇所(ページ間のリンク)にも影響を与えてしまうことです。
可能な限り置換する処理の対象を絞り込み、置換処理は以下のようにするとよいでしょう。

<MTFor replace='src="http://www.powercms.jp/"','src="/"'>
書き換えたいテンプレート部分
</MTFor>

フォームを出力するカスタムフィールドタグに、モディファイア指定する形でも良いです。

<$MTContactFormSelector replace='src="http://www.powercms.jp/"','src="/"'$>

formのaction値を変更する

HTML全体は以上のような作業となりますが、formタグのaction値についてもSSL領域のフォームCGIを指している必要があります。
action値は自動的に生成されるようになっており、MT/PowerCMSの設置時に次の様にセキュアHTTPのプロトコルから指定している場合ならば問題ないのですが、

CGIPath https://www.powercms.jp/mt/

HTTPプロトコルでの指定だったり、以下の様なルート相対パスでの記述だった場合には、その値を元にaction値が生成されるので、表示しているHTMLの状態によって、セキュアHTTPで送信したりHTTPで送信したりと一定しないことになります。

CGIPath /mt/

また、管理画面は公開しないまま、別途公開エリアにContactFormを設置するケースでは、別なURLを指定しなくてはならなくなります。

この様な場合には、以下の環境変数を設定することで、フォームの設置先パスを指定することが出来ます。

ContactFormCGIPath https://www.powercms.net/app/

ContactFormのCGI名を変更する環境変数 ContactFormScript と共にご利用ください。


カテゴリー
サポート
投稿者
小野崎@アルファサード

Recent Entries