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

締切り済みの質問

htaccess 同一URL携帯転送とwww有無統一の両立

RewriteEngine onを使った、
htaccessの書き方について質問させてください。

1.SEOのため、URLは「www」ありに統一させたい。
2.www.○○○.jpとURL直接入力した際、PCにはPC向けのページを、
  携帯には携帯向けのページを表示させたい。

この二つの条件を両立するため、下記のとおりhtaccessを書いてみたのですが、携帯からアクセスしても、PCのTOPが無理やり表示されてしまうという結果に終わりました。

どうすればよいのか、ご存知の方お教えください。

---------------------------------------------------------------

RewriteEngine on
RewriteCond %{HTTP_HOST} ^ドメイン\.jp
RewriteRule (.*) http://www.ドメイン.jp/$1 [R=301,L]

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^vodafone [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^SoftBank [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^KDDI [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^J-PHONE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Up.Browser [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^ASTEL [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^DDIPOCKET [NC]
RewriteCond %{HTTP_USER_AGENT} ^WILLCOM [NC]
RewriteRule ^$ 携帯用URL [R]

投稿日時 - 2008-07-05 16:17:47

QNo.4153280

023

すぐに回答ほしいです

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

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

回答(2)

ANo.2

#1は的外れのようですね
結論から書きますと 携帯用の記述とPC用の記述を上下逆にして
(以下ドメインを example.jp 携帯用のpathを /mobile/ と仮定します)

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo [NC,OR]
##他の携帯は中略 
RewriteCond %{HTTP_USER_AGENT} ^WILLCOM [NC]
RewriteRule ^$ http://www.example.jp/mobile/ [R,L]
## 上が携帯用 下がPC用
RewriteCond %{HTTP_HOST} !^www\.example\.jp
RewriteRule (.*) http://www.example.jp/$1 [R=301]
として試してください。

##こちらで行った実験
うちのTESTサーバーではホスト名に
http://fedora.lanpc/http://www.fedora.lanpc/ などが使える様になっていますが
ドキュメントルートの .htaccessに
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.fedora\.lanpc
RewriteRule (.*) http://www.fedora.lanpc/$1 [R=301,L]

RewriteCond %{HTTP_USER_AGENT} "MSIE 7.0" [NC]
RewriteRule ^$ /php/01/ [R]
## としてみたところ
MSIE7で http://fedora.lanpc/ にアクセスすると
http://www.fedora.lanpc/php/01/ にリダイレクトされ

MSIE7以外のFIREFOXなどでtoppageにアクセスすると
http://www.fedora.lanpc/ にリダイレクトされます。
 これで意図どおりですよね?

で、PCの場合はOKですが携帯の場合 考えられることは
もしかすると2回のリダイレクトはしないのかもしれません

どういうことかと言うと 質問者さんの掲示されたrewriteの場合
携帯で http://example.jp/ にアクセスするとまず上の段のrewriteが実行され
サーバーから

HTTP/1.1 301 Moved Permanently
Date: Sat, 05 Jul 2008 12:46:00 GMT
Server: Apache/2.2.8 (Fedora)
Location: http://www.example.jp/
Content-Length: 303
Connection: close
Content-Type: text/html; charset=iso-8859-1

と言うヘッダが返され 携帯のブラウザは Location: http://www.example.jp/ に従ってリダイレクトします

リダイレクトすると、また .htaccessが読み込まれ
今度は 携帯用の rewriteにマッチするので サーバーから
(Locationヘッダ以外は省略)
Location: http://www.example.jp/mobile/
とヘッダが返されます。
PCのブラウザは再びこのリダイレクトに従いますが
携帯の場合 2度目のリダイレクトはしないのかもしれません

いずれにしろ1回で済むことを2回やっていることに成りますので
上に書いたように順番を変えて記述されて試されてはどうでしょうか?

それでも駄目だった場合ですが、、、
HTTP_USER_AGENT でマッチしていないか?
 (といっても http://www.openspc2.org/userAgent/ の下の方にある携帯の欄を見ても問題ないように見えますが)

Rewriteは抜きにして User-Agentを確認するなら
PHPでしたら
<html><pre><H2>$_SERVER TEST</H2>
<? print_r($_SERVER);?>

CGI(perl)なら
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML><pre>\n<h2>ENV test</h2>";
foreach(sort(keys %ENV)){print "$_ = $ENV{$_}\n";}

こんなのを置いてアクセスすると判ります

投稿日時 - 2008-07-05 22:27:12

ANo.1

RewriteRule ^$ 携帯用URL [R]
  ↓
RewriteRule ^.*$ 携帯用URL [R] ではどうですか?
どうも^$ でマッチしていないような気がするのですが

あと
携帯用URL <=の部分に http://www.ドメイン.jp/ は入っていますか?
  ↓        入っていなければそちらにも一応入れたほうが良いかと思います
RewriteRule ^.*$ http://www.ドメイン.jp/携帯用のページpath [R]

投稿日時 - 2008-07-05 17:04:23

お礼

早速のご回答、ありがとうございます。
しかしながら…うまくいきませんでした(汗)

投稿日時 - 2008-07-05 18:05:57

あなたにオススメの質問