MTOS管理画面のSSL化:「アイテムの管理」および「アイテムの編集」画面の修正

ウェブサイト/ブログにて、「アイテムの管理」「アイテムの編集」画面を表示した際、
ウェブサイト/ブログのURLが http:// で始まる場合は、サムネイルのimgタグは http:// から始まる絶対パスで書き出される為、ブラウザのセキュリティの警告が出てしまいます。
本記事では、その点の修正について記載します。

「アイテムの管理画面」の修正

当初、MT本体のtmplディレクトリを見て、
アイテム一覧の画面は次のテンプレートファイルから生成されていると考えていました。

[MT本体のルートディレクトリ]/tmpl/cms/list_common.tmpl

しかし、このテンプレートはサムネイルのhtmlソースを生成していません。
実際はMT本体のperlのコードにより、サムネイルのhtmlソースを生成する為の
MTテンプレートのソースが、動的生成されてています。

/lib/MT/Asset.pm の159行目あたりに、アイテム一覧のサムネイルのURLを書き出しているコードが有ります。

push @rows, qq{
    <span class="title"><a href="$edit_link">$label</a></span>$userpic_sticker
    <div class="thumbnail picture small">
      <img alt="" src="$thumbnail_url" style="padding: ${thumbnail_height_offset}px ${thumbnail_width_offset}px" />
    </div>
};

これを次のように書き換えます。

my $rootrel_thumbnail_url = $thumbnail_url;
$rootrel_thumbnail_url =~ s/^https?:\/\/[^\/]+//;

push @rows, qq{
  span class="title"><a href="$edit_link">$label</a></span>$userpic_sticker
  <div class="thumbnail picture small">
    <img alt="" src="$rootrel_thumbnail_url" style="padding: ${thumbnail_height_offset}px ${thumbnail_width_offset}px" />
  </div>
};

これで、「アイテムの管理」画面を開いた際に、ブラウザの警告が出なくなります。

「アイテムの編集」画面の修正

「アイテムの管理」画面の際は、本体のperlコードを触ると言うかなり面倒な修正だったのですが、「アイテムの編集」画面はMT管理画面のテンプレートファイルの修正のみで済みます。

具体的には、次のファイルを変更します。

/tmpl/cms/edit_asset.tmpl

まず、事前準備として、テンプレートの冒頭に次のコードを追記します。
URLをルート相対化する際に利用する置き換えパターンをMTの変数として用意します。

<mt:setVarBlock name="var_abs2rel">/https?:\/\/[ドメイン名]/g</mt:setVarBlock>

ファイル内のソースの修正箇所は、まずは69行目あたりです。

        <mt:if name="has_thumbnail">
          <mt:unless name="file_is_missing">
          <img src="<mt:var name="thumbnail_url" escape="html">?ts=<mt:var name="modified_on" escape="url">" width="<mt:var name="thumbnail_width" escape="html">" height="<mt:var name="thumbnail_height" escape="html">"<mt:if name="thumbnail_width"> style="padding: <$mt:var name="thumbnail_height_offset"$>px <$mt:var name="thumbnail_width_offset"$>px"</mt:if> />
          <mt:else>
          <img src="<mt:var name="static_uri">images/asset/<mt:var name="asset_type" escape="html" lower_case="1">-warning-45.png" class="asset-type-icon asset-type-<mt:var name="asset_type" escape="html" lower_case="1"> missing" />
          </mt:unless>
        <mt:else>
          <img src="<mt:var name="static_uri">images/asset/<mt:var name="asset_type" escape="html" lower_case="1">-45.png" class="asset-type-icon asset-type-<mt:var name="asset_type" escape="html" lower_case="1">" />
        </mt:if>

これを次のように変更します。
具体的には、画像のsrc属性を書き出すMTタグに、regex_replaceによるルート相対化の処理を追記しています。

        <mt:if name="has_thumbnail">
          <mt:unless name="file_is_missing">
          <img src="<mt:var name="thumbnail_url" escape="html" regex_replace="$var_abs2rel","" />?ts=<mt:var name="modified_on" escape="url">" width="<mt:var name="thumbnail_width" escape="html">" height="<mt:var name="thumbnail_height" escape="html">"<mt:if name="thumbnail_width"> style="padding: <$mt:var name="thumbnail_height_offset"$>px <$mt:var name="thumbnail_width_offset"$>px"</mt:if> />
          <mt:else>
          <img src="<mt:var name="static_uri" regex_replace="$var_abs2rel","" />images/asset/<mt:var name="asset_type" escape="html" lower_case="1">-warning-45.png" class="asset-type-icon asset-type-<mt:var name="asset_type" escape="html" lower_case="1"> missing" />
          </mt:unless>
        <mt:else>
          <img src="<mt:var name="static_uri" regex_replace="$var_abs2rel","" />images/asset/<mt:var name="asset_type" escape="html" lower_case="1">-45.png" class="asset-type-icon asset-type-<mt:var name="asset_type" escape="html" lower_case="1">" />
        </mt:if>

次に、183行目あたりの次のコードを書き換えます。

<img src="<mt:var name="thumbnail_url" escape="html">" width="<mt:var name="thumbnail_width" escape="html">" height="<mt:var name="thumbnail_height" escape="html">" />

次のように書き換えます。

<img src="<mt:var name="thumbnail_url" escape="html" regex_replace="$var_abs2rel","" />" width="<mt:var name="thumbnail_width" escape="html">" height="<mt:var name="thumbnail_height" escape="html">" />

これで、「アイテムの編集」画面にてブラウザ警告が出なくなります。

あとがき:対応はできたが

MT本体のPerlのコードはいじりたくないです。
6Aさんどうか対応願います(-人-)

関連するタグ

MTOS5, MTOS5.2.10, SSL