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さんどうか対応願います(-人-)