アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

WordPress で同じ URL のまま User-Agent によって別のページを表示する

こんにちは 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

らしいです。 とりあえず思ったとおりに動いてはいますが、他にいい方法はないものでしょうか?

.htaccess

<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>