iPhone用ページに自動で転送する


【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 行目)。これをどこに書くかは二通りある。

  1. httpd.conf(またはそこにインクルードされるファイル)に書く
  2. 転送したいファイルのあるディレクトリの .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 のインデックステンプレートとして作成するならば(そんなことする人いないか?)、最終行に「#」を入れてラストの改行を維持する必要があるだろう。

100321-0001.png

コメントを残す