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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

Q&A

解決済

4回答

4268閲覧

.htaccessによる携帯電話、スマホ、PCの振り分けについて

tennensui0901

総合スコア21

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

.htaccess

Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

0グッド

3クリップ

投稿2015/04/23 00:32

いつもお世話になっております。
マニュアルやウェブ検索では自力解決(理解)ができませんでしたので投稿させて頂きます。

現在、携帯電話、スマホ、PCに対応したウェブサイトを作成しているのですが、
.htaccessを利用しデバイス毎に以下のような振り分け処理を行いたいと思っています。

■振り分け処理(実現したい処理)
・対 PCとスマホ
・"mobile"とその配下へのアクセス → contentA/index.htmlにリダイレクト
・"mobile"とその配下以外へのアクセス → そのまま
・対 携帯電話
・"mobile"とその配下へのアクセス → そのまま
・"mobile"とその配下以外へのアクセス → contentA/mobile/index.htmlにリダイレクト

実現したい処理を行うにあたり、下記.htaccessの記述は適切でしょうか。
.htaccess①の対スマホ用処理は、スマホのuser-agentにも携帯電話の
キーワード(DoCoMoなどキャリア名)が含まれる場合に必要かと思い記述しています。

特に気になっている(理解できていない)所は以下の4点です。
・各所フラグの要否。([L]は必要ないのか等)
・処理がループしないか。
・RewriteRuleの(.*)前に^(ハット)の要否。
・.htaccessは1ファイルにまとめて記述できるか。

本来、自分で確かめべきところですが、googleChromeのエミュレータでは
キャリア名を含むスマホのuser-agentが再現できないようなので
このような形で質問させて頂きます。
またそのため、間違いがない様に可能な限り具体的なご回答を頂けますと幸いです。
よろしくお願い致します。

以下、ディレクトリ構成、.htaccessの内容となります。
■ディレクトリ構成------
http://xxxx.com/
└ contentA (ディレクトリ)
├ index.html
├ .htaccess ・・・①
├ page01.html
├ page02.html
└ mobile (ディレクトリ)
├ index.html
├ .htaccess ・・・②
├ page03.html
└ page04.html

■.htaccess①の内容------

対 スマホ

RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone) [NC]
RewriteRule (.*) $1 [R]

対 携帯電話

RewriteCond %{HTTP_USER_AGENT} (DoCoMo|J-PHONE|Vodafone|SoftBank|MOT-|UP.Browser|KDDI|PDXGW) [NC]
RewriteRule (.*) http://xxxx.com/contentA/m/index.php [R]

対 PC

処理なし


■.htaccess②の内容------

対 PCとスマホ

RewriteCond %{HTTP_USER_AGENT} !(DoCoMo|J-PHONE|Vodafone|SoftBank|MOT-|UP.Browser|KDDI|PDXGW) [NC]
RewriteRule (.*) http://xxxx.com/contentA/ [R]

対 携帯電話

処理なし


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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

閉じ忘れておりました。解決済みとします。

投稿2015/12/14 03:24

tennensui0901

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

問題は無いのですが、補足です。
(.*) これの説明をします。

RewriteRule mobile/(.) http://localhost/aaa/contentA/$1 [R]
こんなふうに設定すると、(.
)のところにマッチした文字が $1 に設定されます。

なので、たとえば
mobile/index.html にアクセスがあった場合、http://localhost/aaa/contentA/index.html
mobile/hoge.html にアクセスがあった場合、http://localhost/aaa/contentA/hoge.html
リダイレクトされるような設定を作ることができます。

mod_rewriteがどのようなマッチングを行ったかをログで確認するといいと思います。
httpd.conf に

RewriteLogLevel 9
RewriteLog "/var/logs/rewrite.log"

のように設定するとログ出力が行われます。

投稿2015/04/24 06:33

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tennensui0901

2015/04/24 10:34

ご回答頂きありがとうございます。 問題ないというお言葉を頂け安心しました。 $1とログ出力の件、参考にさせて頂きたいと思います。 聞きたいことが不明瞭になってしまっているので一度整理します。 ・^(.*)のハットはどのような目的で付けるのでしょうか。 ・2つの.htaccessを1つにまとめることは出来ますでしょうか。  (試したのですがうまくいきませんでした。) ・その他、ご指摘等。 引き続き、ご回答を頂けたらと思います。 よろしくお願い致します。
guest

0

色々試してみましたが、自身の環境(PC、スマホ、携帯電話)では問題ないよう見えましたので
ひとまず以下の形としてみました。
・各所フラグの要否。([L]は必要ないのか等)
→[L]は条件マッチング後、下行に進まないことが自然だと考えたため付けました。
・処理がループしないか。
→わざとループさせてみたところエラー画面が出ました。
そのためエラー画面が出ない下記htaccessの内容はループしていないと判断しました。
・RewriteRuleの(.*)前に^(ハット)の要否。
→これについては必要とは思えませんでしたので付けませんでした。

.htaccess①の内容-------

対 携帯電話

RewriteCond %{HTTP_USER_AGENT} (DoCoMo|J-PHONE|Vodafone|SoftBank|MOT-|UP.Browser|KDDI|PDXGW) [NC]
RewriteCond %{HTTP_USER_AGENT} !(iPhone|iPod|Android.*Mobile|Windows.Phone|dream|blackberry|CUPCAKE|webOS|incognito|webmate) [NC]
RewriteRule (.
) http://xxxx.com/contentA/mobile/index.php [L,R]

.htaccess②の内容-------

対 PC,スマホ

RewriteCond %{HTTP_USER_AGENT} !(DoCoMo|J-PHONE|Vodafone|SoftBank|MOT-|UP.Browser|KDDI|PDXGW) [OR,NC]
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android.*Mobile|Windows.Phone|dream|blackberry|CUPCAKE|webOS|incognito|webmate) [NC]
RewriteRule (.
) http://xxxx.com/contentA/ [L,R]

もし何か問題のありそうな箇所等、ご指摘がありましたら頂けるとありがたいです。

投稿2015/04/24 05:07

tennensui0901

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Chromeの標準機能でUserAgentを好きなようにいじれますよ。
http://www.guava4.me/entry/chrome-user-agent-change
※UA のテキストボックスに任意の文字を入れることができます。

mod_rewriteの設定については以下を参考にしてみては
http://viral-community.com/seo/mod_rewrite-3019/

投稿2015/04/23 03:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tennensui0901

2015/04/23 19:54

ご回答ありがとうございます。 ご紹介頂いた2サイトを拝見させて頂きました。 Chromeでスマホ機種だけでなくUserAgentが任意で変更できることは初めて知りました。 自分の使用しているバージョンでは[Emulation]-[Network]にありましたので活用していきたいと思います。 .htaccessの方ですが、やはり理解できません。 ・各所フラグの要否。([L]は必要ないのか等) →例えば[L]は条件にマッチした場合、下行の条件を読み込まない意味とありますが  各紹介サイトでの使用はまちまちで実際に試しても差が分かりません。 ・処理がループしないか。 →どちらのサイトかは失念してしまいましたが (.*)はすべてがマッチするため  変換後のURLも含まれループするという記載を見ました。  自分の環境で試す限り問題なく動いているように見えましたがサーバー上では  問題が起きているのでしょうか。 ・RewriteRuleの(.*)前に^(ハット)の要否。  ^(ハット)は"先頭の"という正規表現化と思いますが、(.*)に加える必要性が  分かりません。どういう理由があるのでしょうか。  実際、各紹介サイトでもまちまちに見えますし自身で試してみても  差が分かりませんでした。(サイトによってはカッコがない場合もあったりします) これらのことが自分の想定していない状況(UserAgentの値等)によって差が出ること だとしたら怖いので机上での理解を深め納得した上で設定したいと考えています。 引き続きご教授を頂けますと幸いです。よろしくお願い致します。
tennensui0901

2015/04/23 19:55

済みません、分かりにくい表現があるので補足します。 「各紹介サイト」→「.htaccessの記述を説明している各サイト」の意味です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問