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の記述での回答お願いします。
順番を少し変えるわね。
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]
これでどうでしょう。
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]