こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

.htaccessでblogをiphone表示とPC表示に振り分けたい

.htaccessでblogをiphone表示とPC表示に振り分けたいのですが...

この件に数日費やして、あれこれと質問箱などを見て回りましたが
私のような例が見当たらずに困っております。。

どうぞ、お力をお貸しくださいませ。

現在、blogを運営しています。
サーバーにインストールして使うタイプです。

PC表示用は http://ドメイン/blog/
iphone表示用は http://ドメイン/blog/i/ 

という構成で作成しました。

iphoneでアクセスがあった場合は、http://ドメイン/blog/i/に
PCでアクセスがあった場合は、 http://ドメイン/blog/と自動的に振分けられるように
はじめから設置されている.htaccessに、自分なりに下記を付け加えてみました。

# iPhone
RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteRule ^$ /blog/i [R]

RewriteEngine onという表記は、もともとある.htaccessに記述されていましたので省きました。

そうしましたら、無事にiphoneで 
http://ドメイン/blog/ にアクセスすると
http://ドメイン/blog/i/ に飛ぶようになり、成功!と思ったのですが・・。

実は、twitterを使っており、blogの更新をtwitterにお知らせするようにしているので
twitterからのアクセスは、直接個別記事へとなります。

個別記事は、blog側で自動的にディレクトリが作成され、

http://ドメイン/blog/article/個別記事ファイル名 

となります。

その http://ドメイン/blog/article/個別記事ファイル名 へ
iphoneで直接アクセスをするとPCサイトがそのまま表示されてしまいます。

.htaccessは、設置したディレクトリ以下にはすべて反映されると思っておりましたので
どうしてかわからず困っております。


自動的にディレクトリが作成されるからなのでしょうか?

それとも、/blog/フォルダの中に
/blog/i/ と
/blog/article/ が並んでしまうからでしょうか・・・?

ご教授、どうぞよろしくお願いいたします。

投稿日時 - 2010-10-19 00:08:32

QNo.6259827

すぐに回答ほしいです

質問者が選んだベストアンサー

#ANo.1です。

以下のように記述しているってことですよね?

------------------------------
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.htm !-f
RewriteCond %{REQUEST_URI} !/index.php/
RewriteRule ^(.*)$ index.php?pathinfo=$1&%{QUERY_STRING} [L]

RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteCond %{REQUEST_URI} !^/blog/i/
RewriteRule ^(.*)$ /blog/i/$1 [R=302,L]
------------------------------

これだと各ディレクトリに index.php index.html index.htm が存在しない場合などに、上の RewriteRule が適用されてしまいます。
なので、各ディレクトリに index.php index.html index.htm を配置するか、必要なければ以下のようにまるまるコメントアウトしてしまってもたぶん問題ないと思います。

------------------------------
RewriteEngine on

# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteCond %{REQUEST_FILENAME}/index.php !-f
# RewriteCond %{REQUEST_FILENAME}/index.html !-f
# RewriteCond %{REQUEST_FILENAME}/index.htm !-f
# RewriteCond %{REQUEST_URI} !/index.php/
# RewriteRule ^(.*)$ index.php?pathinfo=$1&%{QUERY_STRING} [L]

RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteCond %{REQUEST_URI} !^/blog/i/
RewriteRule ^(.*)$ /blog/i/$1 [R=302,L]
------------------------------

投稿日時 - 2010-10-20 20:12:00

お礼

お礼が遅くなり、申し訳ございませんでした;

いろいろとお教えいただいて、本当に、本当に助かりました。

ありがとうございました!

投稿日時 - 2010-10-25 14:36:45

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

テストしてみましたが以下で問題なく動作しました。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteCond %{REQUEST_URI} !^/blog/i/
RewriteRule ^(.*)$ /blog/i/$1 [R=302,L]

以下が実現できればいいんですよね?

http://ドメイン/blog/
 ↓↓↓
http://ドメイン/blog/i/

http://ドメイン/blog/***/
 ↓↓↓
http://ドメイン/blog/i/***/

http://ドメイン/blog/***/***.html
 ↓↓↓
http://ドメイン/blog/i/***/***.html

など。

投稿日時 - 2010-10-20 11:17:48

お礼

はい!
まさにそのとおりなのですが・・
なぜか私の方ではできません;

blogをインストールした時点で設置されていた.htaccessに書かれていたものは以下になります。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}/index.php !-f
RewriteCond %{REQUEST_FILENAME}/index.html !-f
RewriteCond %{REQUEST_FILENAME}/index.htm !-f
RewriteCond %{REQUEST_URI} !/index.php/
RewriteRule ^(.*)$ index.php?pathinfo=$1&%{QUERY_STRING} [L]


...何度も本当にすみません;

投稿日時 - 2010-10-20 12:02:41

ANo.1

このような場合は正規表現を使います。

RewriteRule ^$ /blog/i [R]

 ↓↓↓

RewriteCond %{REQUEST_URI} !^/blog/i/
RewriteRule ^(.*)$ /blog/i/$1 [R=302,L]

簡単に説明しますと・・
2行目の(.*)は"どんな文字でも"という意味で、$1で呼んでいます。
1行目は、/blog/i/以下がリダイレクトの対象にならないようにしています。

投稿日時 - 2010-10-19 12:07:04

お礼

ご回答ありがとうございました。

早速、教えていただいた正規表現に書き換えてみました^

でも。。やっぱり

http://ドメイン/blog/個別記事ファイル名

への直接アクセスは、iphone用ページに飛んでくれないようなのです。。

あきらめるしかないでしょうか?・・・

投稿日時 - 2010-10-20 10:33:36

あなたにオススメの質問