人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

.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の記述での回答お願いします。

●質問者: トリトン
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 井戸端さん
●250ポイント ベストアンサー

順番を少し変えるわね。
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]

トリトンさんのコメント
早速ありがとうございます! 試してみたのですが、404でも/sp/にリダイレクトしてしまうようです。 RewriteCond sp/%{REQUEST_FILENAME} !-f の部分が動作していないのでしょうか。

井戸端さんさんのコメント
!付けたままだったわ。ごめんなさい。 >|| RewriteCond sp/%{REQUEST_FILENAME} -f ||< >|| RewriteCond /sp/%{REQUEST_FILENAME} -f ||<

トリトンさんのコメント
返信ありがとうございます! 試してみたのですが、RewriteCond /sp/%{REQUEST_FILENAME} -f だとリダイレクトが実行されませんでした。

井戸端さんさんのコメント
回答欄を直してるの。確認して。

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

井戸端さんさんのコメント
>> !aaa\.が正となります。 << 了解。 >> RewriteCond /sp%{REQUEST_FILENAME} -f のところで処理が止まっているように思います。 << スラッシュはspと%{REQUEST_FILENAME}の間よ。 REQUEST_FILENAMEがtest.htmlだったらsp/test.htmlになるってわけなの。

2 ● snow0214
●250ポイント

これでどうでしょう。

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]

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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ