「【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 のインデックステンプレートとして作成するならば(そんなことする人いないか?)、最終行に「#
」を入れてラストの改行を維持する必要があるだろう。