.htaccess に関しての質問です。PCとスマホの振分けを行います。

aaa.jp で、スマホでaaa.jp/test.htmlにアクセスがあれば、aaa.jp/sp/test.htmlにリダイレクトさせたいのですが、リダイレクトのURL(aaa.jp/sp/test.html)が404であれば、リダイレクトせず、aaa.jp/test.htmlになるようにしたいです。

以下の流れを考えましたが、別の仕様でも問題ありません。

1、スマートフォンかどうか
2、リファラーに、「aaa.」が含まれているかどうか
3、リクストされたURLに「/sp/」が含まれていないかどうか
4、リクストされたURLの「.jp」を「.jp/sp/」に置換
5、4で置換したURLが404でなければ、リダイレクトし、404であればリダイレクトしない
※2、で、リファラーをチェックするのは、「PCページへ移動」ボタンを設置するための処理です。

自分で下記を作成しましたが、4,5が分かりませんでした。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android.*Mobile)
RewriteCond %{HTTP_REFERER} !aaa\.
RewriteCond %{REQUEST_URI} !/sp/
RewriteRule ^(.*)$ /sp/$1 [R,L]

具体的な.htaccessの記述での回答お願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/06/27 07:55:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:watercooler No.1

回答回数289ベストアンサー獲得回数51

ポイント250pt

順番を少し変えるわね。
4、404であればリダイレクトしない
5、リクストされたURLの「.jp」を「.jp/sp/」に置換してリダイレクト

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android.*Mobile)
RewriteCond %{HTTP_REFERER} !aaa\.
RewriteCond %{REQUEST_URI} !/sp/
RewriteCond sp/%{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /sp/$1 [R,L]
他4件のコメントを見る
id:yanyan65

コメントありがとうございます。また何度もすみません。
snow0214さんにご指摘いただいたのですが、!aaa\.が正となります。私の質問に誤りがありました。申し訳ありません。
ソース試してみたのですが、RewriteCond /sp%{REQUEST_FILENAME} -f のところで処理が止まっているように思います。 RewriteCond /sp%{REQUEST_FILENAME} -fを消すと、404でも動いてしまいますが、リダイレクトまで実行されます。レンタルサーバー(エックスサーバー)の環境やサブドメインを使っている事など影響しているのでしょうか。。

2014/06/21 11:52:04
id:watercooler

!aaa\.が正となります。

了解。

RewriteCond /sp%{REQUEST_FILENAME} -f のところで処理が止まっているように思います。

スラッシュはspと%{REQUEST_FILENAME}の間よ。
REQUEST_FILENAMEがtest.htmlだったらsp/test.htmlになるってわけなの。

2014/06/21 12:38:01

その他の回答1件)

id:watercooler No.1

回答回数289ベストアンサー獲得回数51ここでベストアンサー

ポイント250pt

順番を少し変えるわね。
4、404であればリダイレクトしない
5、リクストされたURLの「.jp」を「.jp/sp/」に置換してリダイレクト

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android.*Mobile)
RewriteCond %{HTTP_REFERER} !aaa\.
RewriteCond %{REQUEST_URI} !/sp/
RewriteCond sp/%{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /sp/$1 [R,L]
他4件のコメントを見る
id:yanyan65

コメントありがとうございます。また何度もすみません。
snow0214さんにご指摘いただいたのですが、!aaa\.が正となります。私の質問に誤りがありました。申し訳ありません。
ソース試してみたのですが、RewriteCond /sp%{REQUEST_FILENAME} -f のところで処理が止まっているように思います。 RewriteCond /sp%{REQUEST_FILENAME} -fを消すと、404でも動いてしまいますが、リダイレクトまで実行されます。レンタルサーバー(エックスサーバー)の環境やサブドメインを使っている事など影響しているのでしょうか。。

2014/06/21 11:52:04
id:watercooler

!aaa\.が正となります。

了解。

RewriteCond /sp%{REQUEST_FILENAME} -f のところで処理が止まっているように思います。

スラッシュはspと%{REQUEST_FILENAME}の間よ。
REQUEST_FILENAMEがtest.htmlだったらsp/test.htmlになるってわけなの。

2014/06/21 12:38:01
id:snow0214 No.2

回答回数470ベストアンサー獲得回数116

ポイント250pt

これでどうでしょう。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android.*Mobile)
RewriteCond %{HTTP_REFERER} aaa\.
RewriteCond %{REQUEST_URI} !\/sp\/
RewriteCond /sp%{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /sp/$1 [R,L]

質問文
>2、リファラーに、「aaa.」が含まれているかどうか
に合わせました。「含まれていないかどうか」なら、
以下のようにしてください。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android.*Mobile)
RewriteCond %{HTTP_REFERER} !aaa\.
RewriteCond %{REQUEST_URI} !\/sp\/
RewriteCond /sp%{REQUEST_FILENAME} -f
RewriteRule ^(.*)$ /sp/$1 [R,L]
id:yanyan65

回答ありがとうございます!
!aaa\.が正となります。ご指摘ありがとうございました。
試してみましたが、RewriteCond /sp%{REQUEST_FILENAME} -f のところで処理が止まっているように思います。 RewriteCond /sp%{REQUEST_FILENAME} -fを消すと、404でも動いてしまいますが、リダイレクトまで実行されます。レンタルサーバー(エックスサーバー)の環境やサブドメインを使っている事のも影響しているのでしょうか。。

2014/06/21 11:47:47

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません