ケータイで「mod_rewrite + セッション」を使う際の注意点
    このエントリをはてなブックマークに登録

2008/6/6 金曜日 matsui Posted in DoCoMo, サーバ 4 Comments »

ここ最近は大きなニュースが多く、ニュース記事の紹介ばかりでしたので、ひさしぶりに技術メモ的なものを書きたいと思います。

 

先日mod_rewriteを使っていて、セッション絡みで少しつまづいた件をご紹介します。

実はPHPで動いているページを、「*.html」として静的コンテンツに見せる、というものを作ろうとしていました。
.htaccessの内容としては次の通りです。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^([0-9A-Za-z~_\-\.]+)\.html$ /viewer.php?p=$1 [L]
</IfModule>

 

ブラウザで正常に動作することを確認し、その後ドコモの実機でテストしたのですが、何度試してもセッションを引き継いでくれません。

それもそのはず、ドコモ端末はcookieが使えませんので、URLにセッションIDを埋めこんで引き継いでいく必要があります。
上記のような設定では、mod_rewriteがセッションIDの引数をカットしてしまうのです。

 

というわけで、ケータイのセッションに対応するための設定は以下のようになります。

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^([0-9A-Za-z~_\-\.]+)\.html$ /viewer.php?p=$1 [QSA,L]
</IfModule>

[QSA,L]の部分の、QSAフラグがポイントとなります。

リファレンスによると、QSAフラグは次のように説明されています。

このフラグは、置換文字列の中でマッチしたものを書き換えるのではなく、 そこにクエリー文字列部分を追加するように、書き換えエンジンに強制します。書き換えルールを通してクエリー文字列に何かデータを追加したい場合にこのフラグを使います。

ちょっとわかりづらい説明ですが、要はアクセスされたURLについていたクエリー文字列を、そのまま引き継ぐためのフラグです。
これをつけることによって、セッションIDを失うことなくプログラムに渡すことができます。

次のような書き方でも、同じように動くようです。

viewer.php?p=$1&%{QUERY_STRING} [L]

 

なお、ケータイのセッションに関する詳しい説明は、こちらをご覧ください。
→ PHPでケータイからセッションを使う場合の設定方法

 

関連:



postfixで携帯メールを扱う際の注意点
    このエントリをはてなブックマークに登録

2008/5/8 木曜日 matsui Posted in サーバ 2 Comments »

今回はPostfixでケータイ向けメールサーバを作る場合のTipsをご紹介します。

Postfixでメールサーバを作成する場合、「main.cf」に次の項目を設定しておかないと、一部ユーザからのメールを受信できません。

allow_min_user = yes

 

上記は、ハイフン(「-」)から始まるメールアドレスからのメールを受信するために必要です。
Postfixはデフォルトで、ハイフンから始まるアドレスを弾いてしまうためです。

システムに携わっている方は、ハイフンから始まるアドレスを登録するという発想自体が無いと思いますが、一般の方々はそうではありません。

実際に私の管理しているサイトで調査してみたところ、結構多くの方がハイフンから始まるアドレスを利用しているようです。

なお、上記設定を行わないと、送信者には次のようなエラーメールが返ります。

This is the Postfix program at host example.jp.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to <postmaster>

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

			The Postfix program

<-[xxx]@docomo.ne.jp>: invalid recipient syntax: "-[xxx]@docomo.ne.jp"

※検証に使用したPostfixのバージョンは2.2.10です。

 

携帯メールアドレスとRFCについては、下記のサイトが参考になります。

→ Webビジネスコンサルタントのネタ帳 RFCを読まなかった携帯キャリアの罪[hatena.ne.jp]

→ モーグルとカバとパウダーの日記 postfixでドット(ピリオド)で終わるユーザ名の問題[hatena.ne.jp]

 

なお、上記サイトで説明されている、「ピリオドで終わるユーザ名の問題」については、キャリア側で対応されているためか、デフォルトの設定で特に問題なく送信できるようです。

 

関連:



携帯サイトのアクセス分析ソフトをまとめた「モバイルアクセス解析ツール10選」
    このエントリをはてなブックマークに登録

2008/4/25 金曜日 matsui Posted in サーバ, 記事紹介・リンク No Comments »

ケータイサイトを運営する上で欠かせないのがアクセス解析です。
PCであればGoogle Analyticsなど、無料で高機能なものがあるのですが、モバイル用となるとそうはいきません。

「モバイルログ.net」というサイトに、モバイルアクセス解析ツール10選という記事がありましたのでご紹介します。

→ モバイルSEOニュース・情報サイト(モバイルログ.net) モバイルアクセス解析ツール10選 [mobilog.net]

 

有料のものから無料のものまで解説されており、比較検討に役立ちそうです。

ちなみに私はAWStatsを利用することが多いのですが、分析というよりは単なるアクセス数の参照用としか使っていません。
この記事を見て他の分析サービスも試してみようかなと思いました。

 

関連:



携帯向け自動変換用Apacheモジュール「mod_chxj」が0.10系にバージョンアップ
    このエントリをはてなブックマークに登録

2008/4/15 火曜日 matsui Posted in サーバ, ソフト紹介 No Comments »

以前ご紹介したことのある、携帯電話向けに絵文字や画像の変換を行ってくれるApacheモジュール「mod_chxj」ですが、4/10付けで0.10.3にバージョンアップしているようです。

→ SourceForge.JP mod_chxj本家 [sourceforge.jp]

→ SouceForge.jp 今月のプロジェクト 2008年4月 – mod_chxj開発者インタビュー [sourceforge.jp]

→ Devel::Bayside 携帯向け Apache モジュールの本命 mod_chxj [hatena.ne.jp]

 

mod_chxjは、ユーザエージェントから機種を判断し、絵文字やHTML、画像などを自動で変換してくれたり、クッキー非対応のDoCoMo端末のクッキーをエミュレートしてくれたりするApacheモジュールです。

2006年の夏頃から更新がなかったため、てっきりもうメンテナンスされていないと勝手に思いこんでいたのですが、この4月に0.10.x系がリリースされ、ここ最近は頻繁にバージョンアップされているようです。

0.10.x系のインストールはまだ試していませんが、以前のバージョンのインストール方法はこちらにまとめてあります。
恐らくそう変わらずインストールできるのではないかと思います。

→ 絵文字や画像の自動変換を行ってくれるApacheモジュール「mod_chxj」を使ってみました(インストール編)

 

キャリア個別の変換をApacheモジュールにまかせてしまうというのは、速度面や開発負荷の軽減の意味からも、あるべき姿だと思います。

.htaccess等で変換のオン・オフを切り替えられますので、他のPCコンテンツとの同居も簡単に行えますし、安定度と実績さえ示されれば、今後爆発的に普及することも考えられます。
これは期待大ですね。

 

関連:



インプレスR&Dの携帯機種データをダウンロードするスクリプト
    このエントリをはてなブックマークに登録

2008/4/7 月曜日 matsui Posted in サーバ 2 Comments »

先日ご紹介した「インプレスR&Dの携帯機種の詳細スペックデータ」を、自動でダウンロードするためのシェルスクリプトを書いてみました。

このスクリプトをcronなどに登録することで、毎日自動でCSVをダウンロードするといった仕掛けを構築することができます。

#!/bin/sh

# ユーザ名とパスワードを設定
user='[インプレスR&Dから通知されるユーザ名を設定]'
passwd='[インプレスR&Dから通知されるパスワードを設定]'

# URLやファイル名などを設定
url='[インプレスR&Dから通知されるURLを設定]'
filename='profiledata.zip'
dirname='ProfileData'

# CSVファイル名の接頭語を設定
csv=('DisplayInfo' 'ProfileData' 'UserAgent')

# リストをダウンロード
wget --http-user $user --http-passwd $passwd $url

# 展開
unzip $filename

# CSVファイルの日付部分を削除するようにリネーム
for target in ${csv[@]};
do
  mv $dirname/$target* ./$target.csv
done

# 一時ファイルを削除
rm $filename
rm -rf $dirname

使い方は、上記をシェルスクリプトとしてファイルに書き、利用申し込み時にインプレスR&Dから送られてきた、ユーザ名・パスワード・URLをセットし、実行するだけです。

ダウンロードにはwgetを、解凍にはunzipを利用していますので、入っていない方はインストールするか、他のソフト(例えばcurlなど)を利用するようにしてください。

シェルスクリプトはほとんど書かないため、あまり良くない書き方をしているかもしれませんが、もしより良い方法がありましたらご指摘をお願いします。

 

関連: