質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.99%

.htaccessを使ったデバイスごとのURLの振り分け

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 651

obaoba48

score 7

.htaccessを使ったデバイスごとのURLの振り分け

お世話になります。
自分でやってみてもうまくいかないので、ご回答いただければ幸いです。

htaccessの書き方を教えて下さい。

前提・実現したいこと

・サーバーはxserverです
・HTMLサイト

(1) SPディレクトリが、PCディレクトリのサブディレクトリになっている。
(例)
PCサイト : http://example.com/
SPサイト : http://example.com/sp/

(2) 同一ページは同一のファイル名になっている。
(例)
PCサイト : http://example.com/page01.html
SPサイト : http://example.com/sp/page01.html

やりたいことは

⇒ https://www.seohacks.net/basic/qa/sites_tuning_sp/

上記ページの「3.UAに応じた302リダイレクトの設定」

そして

・PCからスマホサイトにアクセスした時は、PC版のサイトが表示され、「/sp/」なしのURLがブラウザバーに表示される
・スマホからPCサイトにアクセスした時は、スマホ版のサイトが表示され、「/sp/」なしのURLがブラウザバーに表示される

ようにしたいです。

試したこと

こちらのページの

⇒ https://qiita.com/yokoh9/items/2e23198294ba314b4b4b

「デバイスごとに振分けを行い、指定ディレクトリにリダイレクトさせる」を参考に302リダイレクトをかけてみました。

PCから「/sp/」ありのURLにアクセスした場合は意図通りになったのですが

スマホから「http://example.com/」にアクセスすると、ブラウザバー上の表示が「http://example.com/sp/」になってしまいます。

/sp/ありのURLが表示されるとGoogle Analytics上でも/sp/が出てしまい、アクセス解析がしにくくなるので、
スマホで見た時に「スマホ版は表示されるがURLは/sp/無しのurl」にしたいのですが、どう記述すれば良いでしょうか。

.htaccessの現状の記載

以下が現状の記載内容です。一応、どこまで書いたら良いのか分からなかったので、今回の質問とは関係のない部分も全て一緒に記載しています。


#suPHP_ConfigPath/home/example/example.com/xserver_php/
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*) https://www.example.com/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule (.*)index.html$ https://www.example.com/$1 [R=301,L]

RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^(.*)$ sp/$1 [R=302,L]
RewriteBase /

RewriteCond %{REQUEST_URI} /sp/
RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^sp/(.*)$ $1 [R=302,L]
RewriteBase /

Header set Vary User-Agent

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2019/02/28 16:18

    あなたが書いたという.htaccessを提示してください

    キャンセル

  • obaoba48

    2019/02/28 16:49

    失礼しました。追記致しましたので、お手数ですがご確認頂けますでしょうか。

    キャンセル

回答 1

checkベストアンサー

0

「/sp/」なしとするのであれば、リダイレクト([R=302])は不要です。

RewriteCond %{REQUEST_URI} !/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^(.*)$ sp/$1 [L]


逆に、スマホから「/sp/」ありのときに、なしにする設定が必要なのでは?

(2019/03/05 23:38) 追記

PC で「/sp/」→「/」にリダイレクトできているのですから、スマホでも同じようにできるはずです。
もっというと、PC でもスマホでも「/sp/」→「/」にリダイレクトするので、RewriteCond の条件は不要になります。
ただし、スマホの場合、前述の「/」→「/sp/」(内部リダイレクト)とリダイレクトループになるので、「/」→「/sp/」は [END] で終了します。
[END] は httpd-2.4 以降で使用できます。

RewriteCond %{REQUEST_URI} !^/sp/
RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone)
RewriteRule ^(.*)$ sp/$1 [END]

RewriteRule ^sp/(.*)$ $1 [R=302,L]

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/05 17:28

    お世話になります。
    ご回答ありがとうございます。
    返信が遅くなり大変申し訳ございません。

    >「/sp/」なしとするのであれば、リダイレクト([R=302])は不要です。

    そうなのですか。ただ、リダイレクトかけないと/sp/ありのURLを手打ちすると、/sp/ありのURLで見られてしまうのかなと思ったのですが(僕としては見せたくない)、そういうわけでもないのでしょうか?


    >逆に、スマホから「/sp/」ありのときに、なしにする設定が必要なのでは?

    はい、その設定は入れたいなと思っているのですが、何を入れたら良いのでしょうか?

    キャンセル

  • 2019/03/06 01:01

    お世話になります。
    度々ご対応頂きましてありがとうございます!

    先ほどご教示頂きました記述をしてみたところ
    うまく行ったような気がします。

    もし上手く作動しない部分があれば再度ご質問させていただくかもしれませんが
    その時はよろしくお願い致します。

    本当にありがとうございます!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.99%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる