人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ユーザーエージェントを見て、スマホの場合は
スマホ用のページへリダイレクトするようにしたいと思います。
ただここで問題なのは、すべてのページでスマホ用ページがあるわけではなく
主要ページはスマホ用ページがあり、それ以外はスマホ用ページがないため、
無い場合は、PC用ページをそのまま表示したいということです。
【例】
スマホ用ページがある場合
sample.jp/a/index.html⇒sample.jp/a/sm-index.html

スマホ用ページが無い場合
sample.jp/a/sub.html⇒そのままリダイレクトしない

現在は、除外リストを作って、それに当てはまる場合はリダレクトしないように
しているのですが、ファイル数が多いことと、今後のメンテナンスを考えると
トラブルが起きそうなので、スマホ用のページのファイルがない場合は
リダイレクトしないというようにしたいのですが、書き方が分からず
困っています。

sample.jp/a/index.html
ここにアクセスがあった場合、
sample.jp/a/sm-index.html
このファイルがあれば、そこにリダイレクトし
無ければ、リダレクトしないようにしたいのです。

どなたかご教授いただければ幸いです。

●質問者: sato
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● かずきち。
●0ポイント

RewriteEngine On
RewriteCond %{HTTP_HOST} !^m.webase.jp [NC]
RewriteCond %{QUERY_STRING} !pc.*$
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android|BlackBerry|Windows\ Phone) [NC]
RewriteCond %{HTTP_USER_AGENT} !iPad [NC]
RewriteRule ^(.*)$ http://m.webase.jp$1 [R=301,L]

このような.htaccessを置いて読みこめばいいですよ。
。hたっせっsの説明は下を。
http://htaccess.me/


satoさんのコメント
早速、ご回答ありがとうございます。 この方法は、スマホサイトがサブドメイン(m)にある場合の方法だと思いますが 私のサイトでは、質問の例のように、ファイル名に「sm-」を付加する形式で スマホページを展開しています。 また、今回の一番の問題は、スマホページが無い場合に、PCページをそのまま表示したいと 言う点です。 もし、お分かりになりましたら、またお願い致します。

a-kuma3さんのコメント
この回答は、以下のページのコピペです。 http://www.webase.jp/news/2012/12/uatablet1212.html 過去の回答履歴を見れば、どのような回答をする利用者か分かります。

2 ● POGPI
●0ポイント

「iPhone」とかを含む場合に、Javascriptで、

location.replace("リダイレクト先");

で、どうですか。


satoさんのコメント
回答ありがとうございます。 javascriptの場合、アクセス解析でリファラーが取れなくなってしまうため 断念しました。 また何か良いアイディアがあれば、よろしくお願い致します。

3 ● a-kuma3
●1000ポイント ベストアンサー

こんな感じで、いけると思います。

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android|BlackBerry|Windows\ Phone) [NC]
RewriteCond %{DOCUMENT_ROOT}$1/sm-$2 -f
RewriteRule ^(.*)/([^/]+)$ $1/sm-$2 [L]

一応、解説。

RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android|BlackBerry|Windows\ Phone) [NC]

エージェントを見て、スマホを区別。
ここは、今もあるでしょうから、そちらを使ってください。

RewriteRule ^(.*)/([^/]+)$ $1/sm-$2 [L]

先に RewriteRule の説明。
スマホ用ページの URL に書き換えてます。
ファイル名の頭に "sm-" をつけます。
こちらも持ってますよね。

RewriteCond %{DOCUMENT_ROOT}$1/sm-$2 -f

スマホ用ページのファイルが存在するかどうかのチェック。
勘所は RewriteRule の条件部分に書いた正規表現の後方参照 ($1 とか) が、RewriteCond でも使える、というところ。
ファイルの置き場所を指定しなきゃいけないので、%{DOCUMENT_ROOT} を頭につけます。


試すにあたって、参考にしたのは、以下の二つ。
http://koseki.hatenablog.com/entry/20090611/ModRewrite
http://httpd.apache.org/docs/2.4/ja/mod/mod_rewrite.html

RewriteCond での正規表現の後方参照 (%1 とか) を、次の RewriteCond や RewriteRule でも使えるっぽいので、別解がもうひとつありそうです :-)


satoさんのコメント
ありがとうございます! ビンゴです! > RewriteRule の条件部分に書いた正規表現の後方参照 ($1 とか) が、RewriteCond でも使える、というところ。 これができることが分からなくて苦労していました。 本当に助かりました。 ありがとうございました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ