クラウド版Movable Typeをステージング環境として使用している場合、本番環境へファイルを配信する際にhtml上のURLがドキュメントルートからのパスに置換されてしまうため、例えばog:url
のcontent
に<mt:CanonicalURL>
を指定しても本番環境ではドメイン部分がごっそり抜けてしまう。
配信される HTML ファイルに含まれている URL (サイト URLと同じ URL のみ)は、/ で始まる相対パスに自動的に置換されます。
サーバー配信 | CMSプラットフォーム Movable Type ドキュメントサイト
そのためphpを利用し以下のように対応した。
htaccessの設置
htmlでもphpが動作するように
AddType application/x-httpd-php .php .html
もしくは
AddHandler application/x-httpd-php .php .html
と記述した.htaccessファイルを作成し本番環境にアップ。
mtのテンプレート内にphpを記述
以下をHTMLヘッダーなどのテンプレートに記述。
まず変数にドメインを格納。
<?php $url = empty($_SERVER["HTTPS"]) ? "http://" : "https://"; $url .= $_SERVER["HTTP_HOST"]; ?>
次に該当箇所にecho
で表示。
<meta property="og:url" content="<?php echo $url; ?><mt:CanonicalURL>">
出力結果
ステージング環境のドメインが example.movabletype.biz
、
本番環境のドメインが www.example.com
の場合、
ステージング環境では
<meta property="og:url" content="http://example.movabletype.biz/http://example.movabletype.biz/2017/12/post.html">
にように出力されてしまうが、配信されるタイミングでステージング環境のドメインは削除される&htmlを生成する際にphpで本番環境のドメインを取得するため、結果的に以下のように出力される。
<meta property="og:url" content="http://www.example.com/2017/12/post.html">
クラウド版Movable Typeは標準の検索機能も使えないし使う案件を選びますね。
配信機能については、相対パスへの書き換えではなく本番環境のドメインに置換するオプションとか用意してくれれば楽なのにな、と思いました。