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

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

新規登録して質問してみよう
ただいま回答率
85.46%
.htaccess

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

Q&A

解決済

2回答

888閲覧

.htaccessでデバイス振り分けとhttpsリダイレクト

Riku12400

総合スコア1

.htaccess

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

0グッド

0クリップ

投稿2021/10/14 10:11

前提・実現したいこと

.htaccessデバイス振り分けとhttpsリダイレクトをやりたいのですが、上手くできません。

発生している問題・エラーメッセージ

httpsリダイレクトは出来ているが、デバイス振り分けが上手くいかないです。

該当のソースコード

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|iPad|Android)
RewriteRule ^$ /sp/ [R]

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

を組み合わせたいです。お力をお貸しください。

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

単につなぎ合わせると、

Apache

1RewriteEngine On 2RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|iPad|Android) 3RewriteRule ^$ /sp/ [R] 4RewriteCond %{HTTPS} off 5RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

例えば、http://example.com/foo/http://example.com/sp/に書き換わりますが、書き換わっても%{REQUEST_URI}は、/foo/のままです。
なので、その次の書き換えでhttps://example.com/foo/になってしまいます。

案1:

Apache

1RewriteEngine On 2RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|iPad|Android) 3RewriteRule ^$ /sp/ [R,L] 4RewriteCond %{HTTPS} off 5RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

とここにLをつけて/sp/に書き換えた段階で一度ブラウザにレスポンスを返し、リクエストし直してもらう。
今度はURLがhttp://example.com/sp/でリクエストがし直され、今回は%{REQUEST_URI}/sp/なのでhttps://example.com/sp/にリダイレクトされます。

案2:
%{REQUEST_URI}を使わない。せっかく正規表現を括弧で囲んでいるので、$1をつかう。

Apache

1RewriteEngine On 2RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|iPad|Android) 3RewriteRule ^$ /sp/ [R] 4RewriteCond %{HTTPS} off 5RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

投稿2021/10/14 12:00

編集2021/10/15 04:58
otn

総合スコア84804

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

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

Riku12400

2021/10/14 12:25

ご丁寧にありがとうございます!試させて頂きます!
otn

2021/10/15 04:57

> httpsですよね。細かいことですが一応。 あ、タイプミスです。ありがとうございます。直しておきます。
guest

0

ベストアンサー

.htaccessならLフラグは効かないはずですが、一応取って試してみては。


Lフラグを取ってどうなるという話でしたね。すみません。

.htaccessで(mod_rewriteで)のLフラグについて興味があればこの回答に付いているコメントをご覧ください。

投稿2021/10/14 11:03

編集2021/10/14 14:33
itagagaki

総合スコア8402

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

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

Riku12400

2021/10/14 11:07

ありがとうございます。試してみます。
otn

2021/10/14 11:23

Lが効かないと言うことは無いと思いますが?
itagagaki

2021/10/14 11:28

.htaccessでは効かないという記述をどこかで見たので不確かながら書き添えました。 それもhttpd.conf次第かもしれないですね。
otn

2021/10/14 12:17

> それもhttpd.conf次第かもしれないですね。 そこまでApacheの機能を変える設定変更はできないと思います。
itagagaki

2021/10/14 12:38

多くの情報源で「.htaccessではLフラグは効かない」「mod_rewriteではLフラグは効かない」と言われており、そのまま鵜呑みにしていました。正確には「mod_rewriteでもLフラグは効き、そこで終了するが、URLを書き換えたらURLパースエンジンに書き換えたものを戻す挙動となるので、またRewriteRuleが最初から評価される」結果、はた目には「.htaccessではLフラグが効いていない」ように見えてしまうということのようでした。
otn

2021/10/14 13:33

ドキュメントを読まずに勝手に意味を想像しておいて、実際にやった結果が想像と違うので、効かないと言っている人がいると言うことですね。普通は、想像と違う動作であればドキュメントを調べるものですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問