- 締切済み
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]
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- umasikajiro
- ベストアンサー率67% (545/803)
#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";} こんなのを置いてアクセスすると判ります
- umasikajiro
- ベストアンサー率67% (545/803)
RewriteRule ^$ 携帯用URL [R] ↓ RewriteRule ^.*$ 携帯用URL [R] ではどうですか? どうも^$ でマッチしていないような気がするのですが あと 携帯用URL <=の部分に http://www.ドメイン.jp/ は入っていますか? ↓ 入っていなければそちらにも一応入れたほうが良いかと思います RewriteRule ^.*$ http://www.ドメイン.jp/携帯用のページpath [R]
お礼
早速のご回答、ありがとうございます。 しかしながら…うまくいきませんでした(汗)