本来はuidは表示されないはずです
なのになぜ表示されるサイトがあるのか考えてみました
ITPro にも書いてありますが、ドコモのuid変換処理はドコモのゲートウェイで行います
ゲートウェイで変換されますので、
モバイルサイトにはuidが変換された状態でアクセスがあります
この状態ですと、携帯でURL表示してもuid=NULLGWDOCOMO のままです
どうしたらuidが見えるのでしょう?
携帯と一度のリクエストで複数回のやり取りがないとダメそうです
ドコモのゲートウェイがヘマしそうにないと思います
一度のアクセスで複数回のリクエストが発生すると言えばリダイレクトですね!
リダイレクトしたい時って古いページとかにアクセスされた時ですよね
携帯サイトだと、違うキャリアのページにアクセスされた時が考えられます
携帯サイトを見ていると、キャリア別ページに二つの方法があるのがわかります
一つ目は同じホスト名でiやeなどのキャリア別ディレクトリになっているパターン
二つ目はホスト名がキャリア別に分かれているパターンです
同じサーバーでリダイレクトした場合、apacheの内部リダイレクトになるかもしれません
そうなると、携帯とのリクエストが発生しないことが考えられます
となると、二つ目のパターンであるキャリア別にホスト名がわかれている方がuidが見えそうです
http://i.example.co.jp/ がドコモ携帯用のサイトだとします
auのURLであるhttp://e.example.co.jp/ にドコモ携帯でアクセスされたらリダイレクトします
mod_rewriteで書いてみます
uidが表示されるであろうルールです
RewriteEngine On RewriteCond %{USER_AGENT} ^DoCoMo RewriteRule (.*) http://i.example.co.jp$1 [R=302,L]
アクセスがあったものをそのままリダイレクトして渡します
正しくは下のような感じでしょうか
uidがあったらNULLGWDOCOMOにしなおす処理をしています
サンプルですが、ルールの実験はしてないので動作保証はしません(−−)
RewriteEngine On RewriteCond %{USER_AGENT} ^DoCoMo RewriteCond %{QUERY_STRING} ^((?:&?w+=w+)*)(?:&?uid=w{12})((?:&w+=w+)*)$ RewriteRule (.*)?$ http://i.example.co.jp$1?%1&uid=NULLGWDOCOMO%2 [R=302,L]
中小のモバイルサイトの場合、キャリア別にサーバーを分ける必要なさそうですよね
となると、uidがそのまま見える現象は大手のモバイルサイトに起きやすいと思います