以前から、Movable Typeのデータベースにアクセスしてモバイル向けのページを出力するスクリプトMT4iを、moblog.tateru.jpドメインで動かしています。これまで自分しか使わないことを前提としていたのですが、最近のASP型blogのほとんどが携帯電話のブラウザでアクセスするとモバイル向けページへ飛ばしてくれてとても便利だし、mixiモバイルやGREEモバイルから飛んで来る人たちにPC向けページを返すのもおかしな話なので、携帯電話でblog.tateru.jp上のページへアクセスした場合にmoblog.tateru.jp上の対応したページへ転送するようにしました。
UserAgentで携帯電話かどうか判別するPHPコードをすべてのページに仕込んだだけなので、UserAgentを変更できるブラウザでアクセスすればPCでもモバイル向けページへ転送されます。決め打ちのIPアドレスやリモートホストアドレスなどで判別すると、フルブラウザでアクセスして来た人までモバイル向けページへ飛ばしてしまいそうなので、UserAgentを使いました。
仕込んだPHPコード
# トップページ
<?php
if (ereg("UP\.Browser|KDDI|PDXGW|DoCoMo|J\-PHONE|MOT|Vodafone|L-mode", $_SERVER['HTTP_USER_AGENT']))
{
header("Location: http://moblog.tateru.jp/");
exit;
}
?>
# 各エントリーページ
<?php
if (ereg("UP\.Browser|KDDI|PDXGW|DoCoMo|J\-PHONE|MOT|Vodafone|L-mode", $_SERVER['HTTP_USER_AGENT']))
{
ereg("[0-9]{6}", $_SERVER['PHP_SELF'], $eid);
header("Location: http://moblog.tateru.jp/index.cgi?id=1&mode=individual&no=2&eid=$eid[0]");
exit;
}
?>
Movable Typeの出力するページは基本的にXHTMLドキュメントなので、当然1行目には"<? ?>"で挟まれたXML宣言があるわけですが、通常PHPのインタプリタはこれをPHPコードの開始位置と解釈してしまいます。また、XHTMLドキュメントは拡張子をphpにするべきではありませんが、通常ApacheのPHPモジュールは拡張子がphpであるファイルのみPHPインタプリタを通して出力します。そこで.htaccessに2行ほど追加して、短縮型PHPタグ"<? ?>"を無効にし、拡張子がhtmlのファイルもPHPインタプリタを通るようにしました。
.htaccessに追加した2行
php_flag short_open_tag Off
AddType application/x-httpd-php .html
自分のau PENCKと母親のvodafone 702NKではうまく転送されたし、おそらくどの端末でも同じように動作すると思いますが、お手元の端末で試してみていただけたら幸いです。