「【MovableType】iPhone用テンプレートの導入 | blog.delphinus.dev」では iPhone 用のページを作成し、切り替えて利用できるようにした。しかし、実際に使うときにはPCで見たときは PC 用ページ、iPhone で見たときには iPhone 用ページを表示して欲しい。そんなときは Apache の mod_rewrite モジュールを利用する。ここのサイトが詳しかった。
杉浦とホームページ製作〜 URL を書き換えろ!「Rewrite 機能とは」
http://www.nurs.or.jp/~sug/homep/rewrite/rewrite1.htm
Apache の設定を確認
httpd.conf に次の一行があるか確認する。そもそもこれがないとモジュール自体が機能しない。
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
そして肝心の「iPhone 用のページに自動で転送する」ためには次の設定を使う。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteCond %{REQUEST_URI} !^/m/
RewriteRule ^(.*)\.html$ /m/$1.html [L]
User-Agent 文字列に「iPhone」「iPod」を含み(2 行目)、要求された URI が「/m/」で始まらない場合は(3 行目)、HTML ファイルの要求を「/m/」ディレクトリにある同名のファイルへ転送する(4 行目)。これをどこに書くかは二通りある。
httpd.conf(またはそこにインクルードされるファイル)に書く- 転送したいファイルのあるディレクトリの
.htaccessに書く
1. httpd.conf に書く
転送したいディレクトリの <Directory> 節に設定を書き込む。例えば次のようになる。
<Directory /blog>
Options -Indexes
Order allow,deny
Allow from all
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteCond %{REQUEST_URI} !^/m/
RewriteRule ^(.*)\.html$ /m/$1.html [L]
</Directory>
これにより iPhone で http://example.com/blog/sample-post.html へアクセスすると、http://exmple.com/blog/m/sample-post.html に転送されるようになる。
2. .htaccess に書く
可能ならこの方法は使わない方がよい。.htaccess の解析及び実行はリクエスト毎に発生するので、相対的にサーバのレスポンスが悪くなってしまうのだ。それでも、管理者権限がなかったりして1.の方法を採れないならば仕方ない。
まずは、httpd.conf 内で .htaccess を利用可能になっているか確認する。
<Directory /blog>
Options FollowSymLinks
AllowOverride All
# 又は、AllowOverride FileInfo Options
Order allow,deny
Allow from all
</Directory>
ハイライトした部分が書かれていれば .htaccess による転送が利用可能だ。転送したいディレクトリ内に .htaccess というファイル名で次の内容を保存しよう。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteCond %{REQUEST_URI} !^/m/
RewriteRule ^(.*)\.html$ /m/$1.html [L]
4 行目の最後には改行を入れないと正常に動かないので注意。もし .htaccess を MovableType のインデックステンプレートとして作成するならば(そんなことする人いないか?)、最終行に「#」を入れてラストの改行を維持する必要があるだろう。

