スマホ用のページへリダイレクトするようにしたいと思います。
ただここで問題なのは、すべてのページでスマホ用ページがあるわけではなく
主要ページはスマホ用ページがあり、それ以外はスマホ用ページがないため、
無い場合は、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/