XREA に Movable Type をインストールする(自動広告挿入対処まとめ)
「小粋空間」とは別に、以前から運用しているサイト(ブログ)がひとつあります。そのサイトは独自ドメイン+DDNSで自宅サーバで運用しているのですが、PCを1日中稼動させないといけないため電気代がバカになりません。
それよりもうんざりなのが部屋の温度。夏はまだ遠いというのにもう暑くなってきています。これでエアコンを入れたりするのは地球環境上良い訳がなく、いい加減レンタルサーバに移転することにしました。
1.XREA について
今回選んだレンタルサーバは「XREA(XREA+)」です。「エクスリア(エクスリアプラス)」と読みます。XREA は無料サーバ(広告あり)。XREA+は有料で広告なしです。XREA から XREA+ への移行も可能です。
XREA+ の料金は200?400円/月(契約期間によって変動)、ディスク容量2GBで、現在当サイトで利用しているさくらのレンタルサーバ(スタンダード:月500円、1GB)と比較してもかなりお得です。また、PHP をモジュール版として動作させることができる数少ないレンタルサーバです。モジュール版についての詳細は下記の記事をご覧ください。
2.XREA とバリュードメイン
さて、サーバをレンタルしようと登録ページに進み、下の方を見ると「VALUE-DOMAINでドメインを取得された方云々…」という文言が目に入りました。
実は、取得しているドメインは「バリュードメイン(VALUE DOMAIN)」 を利用してまして、XREA もバリュードメインも同じ「株式会社デジロック」が運営していることにその時気がつきました。
そういう訳で、VALUE DOMAIN を利用されている方であれば、その文言のリンクからバリュードメインのページにジャンプして、そこから登録することができます。
また現在、一般向けの無料レンタルサーバは募集していないようですが(下)、
申し訳ございません。 現在、一般向け無料サーバーの募集は行っておりません。 次期募集をお待ち下さい。
VALUE DOMAIN でドメインを取得していれば無料サーバーを利用することができます。
3.XREA で Movable Type インストールエラー
とりあえずお試しで、無料の XREA サーバを取得し、Movable Type 3.35-ja のファイルをアップロード。Wizard を利用したインストールでログイン名・パスワード設定画面までは順調に進んだのですが、そこから先に進もうとするとエラーに遭遇。
IE ではDNSエラー、Firefox では「included というプロトコルはどのプログラムにも関連づけられておらず、Firefox でこのアドレスを開く方法が分かりません。」という上のダイアログが表示されました。
4.対処方法
調べてみると、XREA の自動広告挿入が影響しているようで、CGI が正常に動作しないことが判明。http://? を included://? という URL に変換しているのが原因らしいです。
そういう訳でヒットした対処方法を挙げておきます。対処についてはレンタルサーバーの利用規約に反しないよう、ご自身の責任で行ってください。また全ての対処を試した訳ではありませんのであしからず。
4.1 ディレクトリ「x」に Movable Type をインストールする
これが XREA 特有の規定らしく、ディレクトリ「x」の下にあるデータは広告が挿入されません。
したがって、public_html の直下に手動で x というディレクトリを作成し、その配下に Movable Type をアップロードして実行させるといいようです。
4.2 CGI の拡張子を .xcg にする
これも XREA 特有の規定です。CGI ファイルの拡張子を全て .xcg にすることで x ディレクトリに配置しなくても正常に動作するようになるようです。
4.3 .htaccess に LayoutIgnoreURI を設定する
.htaceess を作成し、その中に下記の1行
LayoutIgnoreURI *.cgi
を記述して、サーバ(public_html 直下)にアップロードしておけば、CGI 実行で広告が表示されなくなるようです。
4.4 CGI.pm を書き換える
extlib/CGI.pm を任意のエディタで開き、下記の赤色を削除し、青色を追加(3.35-ja では 1232行目辺り)。
# Maybe future compatibility. Maybe not.
my $protocol = $ENV{SERVER_PROTOCOL} || 'HTTP/1.0';
my $protocol = $ENV{'SERVER_PROTOCOL'};
$protocol = 'HTTP/1.0' if (! $protocol || $protocol eq 'INCLUDED');

