スマホ用のページへリダイレクトするようにしたいと思います。
ただここで問題なのは、すべてのページでスマホ用ページがあるわけではなく
主要ページはスマホ用ページがあり、それ以外はスマホ用ページがないため、
無い場合は、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
このファイルがあれば、そこにリダイレクトし
無ければ、リダレクトしないようにしたいのです。
どなたかご教授いただければ幸いです。
こんな感じで、いけると思います。
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 でも使えるっぽいので、別解がもうひとつありそうです :-)
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/
早速、ご回答ありがとうございます。
この方法は、スマホサイトがサブドメイン(m)にある場合の方法だと思いますが
私のサイトでは、質問の例のように、ファイル名に「sm-」を付加する形式で
スマホページを展開しています。
また、今回の一番の問題は、スマホページが無い場合に、PCページをそのまま表示したいと
言う点です。
もし、お分かりになりましたら、またお願い致します。
この回答は、以下のページのコピペです。
http://www.webase.jp/news/2012/12/uatablet1212.html
過去の回答履歴を見れば、どのような回答をする利用者か分かります。
「iPhone」とかを含む場合に、Javascriptで、
location.replace("リダイレクト先");
で、どうですか。
回答ありがとうございます。
javascriptの場合、アクセス解析でリファラーが取れなくなってしまうため
断念しました。
また何か良いアイディアがあれば、よろしくお願い致します。
こんな感じで、いけると思います。
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 でも使えるっぽいので、別解がもうひとつありそうです :-)
ありがとうございます!
ビンゴです!
> RewriteRule の条件部分に書いた正規表現の後方参照 ($1 とか) が、RewriteCond でも使える、というところ。
これができることが分からなくて苦労していました。
本当に助かりました。
ありがとうございました!
ありがとうございます!
2014/10/23 14:40:54ビンゴです!
> RewriteRule の条件部分に書いた正規表現の後方参照 ($1 とか) が、RewriteCond でも使える、というところ。
これができることが分からなくて苦労していました。
本当に助かりました。
ありがとうございました!