スマホ用とPC用のホームページ振り分

このQ&Aのポイント
  • スマホ用ホームページとPC用のホームページの振り分けについて質問いたします。
  • スマホからのアクセスに対してはスマホ用のホームページが表示され、pcからのアクセスに対してはpc用のホームページが表示されるように.htaccessを変更したいです。
  • http://www.xxx.co.jp/sp/xxxx.htmlのページをpcで表示させた場合にはhttp://www.xxx.co.jp/xxxx.htmlを表示するように.htaccessを設定したいです。
回答を見る
  • ベストアンサー

スマホ用とPC用のホームページ振り分

スマホ用ホームページとPC用のホームページの振り分けについて質問いたします。 pc用のホームページを「http://www.xxx.co.jp/」に作成し、スマホ用のホームページを「http://www.xxx.co.jp/sp/」に作成しました。 スマホからのアクセスに対してはスマホ用のホームページが表示され、pcからのアクセスに対してはpc用のホームページが表示されるように下記のような内容を「.htaccess」に書いています。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC] RewriteCond %{QUERY_STRING} !mode=pc RewriteCond %{REQUEST_URI} !(^/sp/) RewriteRule ^(.*)$ /sp/$1 [R,L] </IfModule> <IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 day" </IfModule> ところがpcを利用してGoogleなどの検索にてhttp://www.xxx.co.jp/sp/xxxx.htmlなどと検索結果が出た場合、そこをクリックするとpcにスマホ用のホームページが表示されてしまい、横に間延びした見苦しい内容になっています。 http://www.xxx.co.jp/sp/xxxx.htmlのページをpcで表示させた場合にはhttp://www.xxx.co.jp/xxxx.htmlを表示するように.htaccessを追加変更したいのですがどのようにすればよいのか分かりません。

  • CGI
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • heburusu
  • ベストアンサー率85% (140/164)
回答No.3

ご確認頂きありがとうございます。 -- は不要です。 度々すみません、RewriteRuleが誤っておりました。 最後の行は以下が正しいと思います。 RewriteRule ^/sp/(.*)$ /$1 [R,L]

kuma_tamur
質問者

お礼

早速のご指示有難うございます。 最後のRewriteRuleのスクリプトを修正して試してみました。 結果は次の通りです。 ・以前のように「このページは表示できません・・」などのエラー文は表示されない。 ・ただ表示されたホームページはスマホ用の画面でPCの画面にリライトされてはいない。 ・そのときブラウザーのURL表示覧には「http://www.xxx.co.jp/sp/xxx.html」 となっており、URLを見てもりリライトされていないようです。

kuma_tamur
質問者

補足

解決しました。 RewriteRule ^/sp/(.*)$ /$1 [R,L]  を RewriteRule ^sp/(.*)$ $1 [R,L]    に書き換えることで http://www.xxx.co.jp/sp/xxx.html  が http://www.xxx.co.jp/xxx.html  に リライトされるようになりました。 いろいろとご協力有難うございました。

その他の回答 (2)

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.2

お試して頂きありがとうございます。 回答で折りかえされてしまっていますが、以下は1行となっているので正しいです。 こちらは1行で記述されていますか? -- RewriteCond %{HTTP_USER_AGENT} !(iPhone|Android.*Mobile|Windows.*Phone) [NC] --

kuma_tamur
質問者

お礼

ご指摘の確認事項については問題ありません。1行で記述されています。 追加スクリプトの最初と最後についている”--”は必要でしょうか?

kuma_tamur
質問者

補足

遅くなりましたが下記にディレクトリ構成を書いておきます。 www |----.htaccess |-----xxx.html |---- [spディレクトリー]  *スマホ用ページのホルダー        |---xxx.html

  • heburusu
  • ベストアンサー率85% (140/164)
回答No.1

RewriteRule ^(.*)$ /sp/$1 [R,L] の下に以下内容を追加してあげればよいかと思います。 /spにアクセスした端末がスマホでなければ、/ にリダイレクトする。 -- RewriteCond %{REQUEST_URI} ^/sp/ RewriteCond %{HTTP_USER_AGENT} !(iPhone|Android.*Mobile|Windows.*Phone) [NC] RewriteRule ^(.*)$ /$1 [R,L] --

参考URL:
http://d.hatena.ne.jp/mrgoofy33/20101009/1286615362
kuma_tamur
質問者

お礼

早速のご指示有難うございます。 おっしゃるとおりのスクリプトを追加して確認した結果不具合が発生します。 http://www.xxx.co.jp/sp/xxx.html をアクセスした時、ブラウザーには「このページは表示できません・・」などと表示が出て http://www.xxx.co.jp/xxx.html を見ることは出来ませんでした。因みにそのときのブラウザのURL欄には http://www.xxx.co.jp/sp/xxx.html が表示されていました。 これは /spにアクセスした端末がスマホでない場合、/にリダイレクトされていないのではないでしょうか?

関連するQ&A

  • スマートフォン用のホームページ

    スマートフォン用のホームページを作成しています。スマホからのアクセスなのかPCからのアクセスなのかを判断して表示するページを判別するものです。 http://www.abc.com/index.html をスマホでアクセスしたとき http://www.abc.com/sp/index.html が表示されるように.htaccessファイルに次のように記述しました。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC] RewriteCond %{QUERY_STRING} !mode=pc RewriteRule ^$ /sp/ [R,L] </IfModule> これだと http://www.abc.com/index.html をアクセスしたときには正常に http://www.abc.com/sp/index.html を表示しますが、 http://www.abc.com/bbbb.html などとトップページ以外のURLを指定したときはそのまま http://www.abc.com/bbbb.html が表示されてしまい表示してほしいスマホ用のページ http://www.abc.com/sp/bbbb.html は表示されません。 ここで質問ですがスマホで http://www.abc.com/bbbb.html をアクセスしたときにも http://www.abc.com/sp/bbbb.html が表示されるようにするにはどのように.htaccessを変更すればよいのでしょうか?

  • アドレスの最後に/が無い場合、/ありのアドレスに飛ばしたい

    mod_rewrite を使って、静的なページのようにアドレスを表示させました。 http://****.jp/page/10/ このようなアドレスでアクセスできるのですが、アドレスの最後のスラッシュがなくてもアクセスする事が出来ます。 http://****.jp/page/10 ←スラッシュがない そこで、アドレスの最後のスラッシュがないアドレスにアクセスした場合、スラッシュありのアドレスに飛ばすにはどの様にすればいいのでしょうか? .htaccessは、下記のようにしています。 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /page/index.php [L] </IfModule>

  • httpsでmod_rewriteができない

    はじめまして。 Linux環境で、apacheのhttp.confにmod_rewriteを記載し、httpsとhttpを切り替えたいと思っています。 httpd.confに以下のように記述しています。 <IfModule mod_rewrite.c> RewriteEngine on  #(1)httpで/aaaa/bbbbにアクセスされたときにhttps://~に変えたい RewriteCond %{REQUEST_URI} ^/aaaa/bbbb RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R]  #(2)httpsで/cccc/ddddにアクセスされたときにhttp://~に変えたい RewriteCond %{REQUEST_URI} ^/cccc/dddd RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R] </IfModule> 上記(1)のhttpでのアクセス時には、mod_rewriteが効いてhttpsへ切り替えられるのですが、 上記(2)のhttpsでのアクセス時には、mod_rewriteが効いていないようでhttpへ切り替えられません。 rewriteログを見てみると、当サイトへhttpでアクセスした場合にはログが出力されますが、 httpsでアクセスした場合には出力されません。 そもそもhttpsでのアクセスの場合にhttpd.confのmod_rewriteが効いていないようです。 ですが、これに対しどこを調査すべきかが分かっていません。 SSLの設定自体は出来ていると思っていて、 https://xxxx.jpのようにアクセスするとちゃんとページが表示されます。 どの当たりに問題がありそうでしょうか? 解析のヒントを頂けたらと思います。 宜しくお願い致します。

  • リダイレクトのhtaccessを置くと403エラー

    perlで書いたCGIファイルがあるのですが、スマホ用のリダイレクトhtaccessファイルをトップディレクトリに置いた所、CGIのページが403エラーになってしまいました。 .htaccessファイルを外すと正常に表示するので、原因は.htaccessなのですが、理由が思い当たりません。 CGIのソースは出せないですが、お問い合せフォーム用のCGIです。 何かお気づきの点がありましたら助言お願い致します。 ● .htaccess(トップディレクトリに設置) <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} !/sp/ RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) RewriteRule ^(.*)$ sp/$1 [R] RewriteBase / RewriteCond %{REQUEST_URI} /sp/ RewriteCond %{HTTP_USER_AGENT} !(iPhone|Android.*Mobile|Windows.*Phone) RewriteRule ^sp/(.*)$ $1 [R] RewriteBase / </IfModule> ● ディレクトリ構造 /index.html・・・トップページ /.htaccess・・・上記内容 /contact/all/index.cgi・・・403エラーになるCGI /contact/all/.htaccess・・・「Options ExecCGI」のみ記述 /sp/・・・スマホ用のリダイレクト先ディレクトリ(以下略)

  • SSLのリダイレクトについて

    sslのリダイレクトの作業を急いでやらないといけないのですが、sslに関しては全くの初心者なので調べながらいろいろやってみましたがどうしてもうまくいかず困っています。。 Wordpressでサイトを作成していてドメイン直下の.htaccessにリダイレクトの記述をしています。 サーバーはGMOのiCLUSTAで、sslはジオトラストです。 http://○○○.jp/ にアクセスした場合に、 https://ssl.○○○.jp/ へリダイレクトされるようにしたいです。 .htaccessの記述内容です # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress RewriteEngine on RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://ssl.○○○.jp/$1 [R=301,L] この記述をしていますが、リダイレクトされたりされなかったりの不安定な状態です。 されないことの方が多いのでどの条件で動いているのかがわかりません。 RewriteCond %{HTTPS} on を、 RewriteCond %{HTTPS} off にするとリダイレクトされますが、処理がループされていますという表示が出てしまいます。 どのような記述をすればうまくいくのでしょうか?

  • .htaccessでスマートフォンを振り分けたい

    .htaccessでスマートフォンを振り分けたいと思っています。 私が書いた.htaccessは <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone|BlackBerry) [NC] RewriteRule ^/$ http://www.サイト名.com/smartphone/index-m.html/ [R,L] </IfModule> なのですが、iPhoneで試してみても元のPCのサイト(サイト名.com)に行ってしまいます。 でも、PCでインターネットエクスプローラを使うときのみスマートフォンのサイトに行くのです。 (サファリとグーグル・クロームは大丈夫です) もう何がなんだかわかりません。。。 何かヒントでも結構ですので、お分かりになる方がいらっしゃいましたら、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • .htaccessで携帯とPCの振り分け

     .htaccessで携帯サイトとPCサイトの振り分けで困っています。 .htaccessは以下の通りです。 <IfModule mod_rewrite.c> RewriteEngine On # SoftBank RewriteCond %{HTTP_USER_AGENT} ^J-PHONE [OR] RewriteCond %{HTTP_USER_AGENT} ^Vodafone [OR] RewriteCond %{HTTP_USER_AGENT} ^MOT- [OR] RewriteCond %{HTTP_USER_AGENT} ^SoftBank RewriteRule ^$ /mobile/[R=302,L] # DoCoMo RewriteCond %{HTTP_USER_AGENT} ^DoCoMo RewriteRule ^$ /mobile/[R=302,L] # au(HDML-Only) RewriteCond %{HTTP_USER_AGENT} ^UP.Browser RewriteRule ^$ /mobile/[R=302,L] # au(HTML-OK) RewriteCond %{HTTP_USER_AGENT} ^KDDI RewriteRule ^$ /mobile/[R=302,L] </IfModule>  これで、PCからのアクセスはどのページへも正常なのですが、携帯からのアクセスはhttp://example.comですとちゃんと携帯サイトのindex.htmlへいくのですが、http://example.com/***.htmlで携帯からアクセスするとPCサイトのhttp://example.com/***.htmlへつながってしまいます。この場合、携帯サイトのindex.htmlへ導くためにはどのようにすればよいのでしょうか。  また、欲を言えば、PCサイトのそれぞれのページにアクセスしてきた携帯をindex.htmlではなく、携帯サイトのそれぞれの該当するページへと導くためにはどのようにしたらよいのでしょうか。  まったくの初心者ですが、よろしくお願いいたします。

  • スマフォの振り分け

    .htaccess で以下のように振り分けたのですが、i pod touch で見ると アドレス欄には http://ドメイン/smart/ を読み込むのですが、 ページが開けないになります。どうしてでしょうか? <IfModule mod_rewrite.c> RewriteEngine On # iPod RewriteCond %{HTTP_USER_AGENT} iPod RewriteRule ^ http://ドメイン/smart/ [R] # iPhone RewriteCond %{HTTP_USER_AGENT} iPhone RewriteRule ^ http://ドメイン/smart/ [R] # Android RewriteCond %{HTTP_USER_AGENT} Android RewriteRule ^ http://ドメイン/smart/ [R] # WILLCOM RewriteCond %{HTTP_USER_AGENT} PDA RewriteRule ^ http://ドメイン/smart/ [R] </IfModule>

    • ベストアンサー
    • HTML
  • .htaccessでリダイレクトしたいです@さくら

    .htaccessでwwwなしのサイトにリダイレクトをかけたいのですが、うまくいきません。 色んな方法がサイトにありそれを試しているのですが、 一瞬テストでうまくいったと思ったのですが、それ以降うまくいかなくなってしまいました。 使用しているプロバイダはさくらインターネットです。 今までに試したコマンドは下記です。 --------------------------- <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.hoge\.com)(:80)? RewriteRule ^(.*) http://hoge.com/$1 [R=301,L] </IfModule> --------------------------- RewriteEngine on RewriteCond %{HTTP_HOST} www¥.hoge¥.com RewriteRule .* http://hoge.com%{REQUEST_URI} [R=301,L] --------------------------- .htaccess を設置しているディレクトリは /home/hoge/www になります。 ぜひ教えていただけないでしょうか。よろしくお願いいたします。 また、.htaccessは変更してどのくらいで反映されるのか、補足的に教えていただけると助かります。 以上、よろしくお願いいたします。

  • mod_rewriteについて教えてください。

    mod_rewriteについてお願いします。 「a」と「b」というフォルダにそれぞれ「index.html」「test.html」が入っています。「a」と「b」で「index.html」「test.html」の内容はちがいます。 わたしが一番望んでいるのは http://example.com/a/以下にアクセスがあった場合 http://example.com/b/以下にリダイレクトさせるというものです。 例) http://example.com/a/test.htmlにアクセスがあったらhttp://example.com/b/test.htmlにリダイレクト。 ------------------------------------------------------------ Options +FollowSymLinks AddHandler cgi-script htaccess <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/a/$ /b/$1 [R=302,L] </IfModule> ------------------------------------------------------------ としてみましたが、リダイレクトされません。 ちなみに RewriteRule ^$ /b/$1 [R=302,L] と書くと、http://example.com/にアクセスがあった場合 http://example.com/b/にリダイレクトされましたので mod_rewriteには対応しております。 ご教授のほど、よろしくお願いいたします。

専門家に質問してみよう