こんにちは tahara です。
今回は WordPress です。
http://example.com/foo がリクエストされた時、クライアントがスマホだったら、 リダイレクトすることなく、同じ URL のまま、スマホ用のページを表示するには、 どうしたらいいか? 「、」が多い。
これがリダクレクトして別 URL になっても OK だよ、なら話は簡単だったのですが、 WordPress のパーマリンクの関連でかなり悩みました。
mod_rewrite で /foo が来たら /smartphon/foo に書き替えればいいや、と思っ ていたのですが、WordPress のパーマリンクは /smartphon/foo に書き替えて も最初のブラウザの要求の /foo をもとにページを返してきます。
で、結局は自分自身に proxy して解決しました。 しかし、自分自身への proxy は http://httpd.apache.org/docs/current/mod/mod_rewrite.html によると
doesn't make sense, not supported
らしいです。 とりあえず思ったとおりに動いてはいますが、他にいい方法はないものでしょうか?
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / # for smartphone RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !^/smartphone.*$ RewriteCond %{REQUEST_URI} !^/index.php RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android|BlackBerry) [NC] RewriteCond %{HTTP_USER_AGENT} !iPad [NC] RewriteCond %{HTTP_COOKIE} !wptouch_switch_toggle=normal RewriteRule .* - [E=SMART_PHONE_P:T] RewriteCond %{ENV:SMART_PHONE_P} =T RewriteRule ^$ http://example.com/smartphone [P,L] RewriteCond %{ENV:SMART_PHONE_P} =T RewriteRule ^foo$ http://example.com/smartphone/foo [P,L] RewriteCond %{ENV:SMART_PHONE_P} =T RewriteRule ^foo/bar$ http://example.com/smartphone/bar [P,L] # for WordPress permlink RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>