前提・実現したいこと
恐れ入ります。質問させていただければと思います。
・PCサイトはルートのアドレス、モバイルからは/mobile/にindex.phpでリダイレクトされている。
・.htaccessなどでは振り分けられていない
・その/mobile/以下にリダイレクトされたURLを、ユーザに直接再共有(非twitterボタン)されて
その共有を見た人にモバイルアクセスされると、
/mobile/mobile/…と共有回数分ディレクトリが増えてしまう
<実現したい点> これを/mobile/ 1回に留めたい
(PCとモバイル表示はは別ディレクトリなので、/mobile/をルートに戻す必要はない)
発生している問題・エラーメッセージ
マイナーなCMSがモバイルの振り分けをPHP上でやっているのですが、 こちらそのままだと、モバイルは/mobile/に行く仕組みになっていますが、 /mobile/のアドレスをスマホブラウザのメニューにある共有等から共有されると /mobile/mobile/…と閲覧URLのディレクトリがループしていきます。 サイト上のtwitterボタンでの共有ではURL正規化の設定でそれを避けられているのですが、 直接ブラウザ等から共有されると、いかんともしがたく 〈ドメイン名)/mobile/mobile/hogehoge.html 〈ドメイン名)/mobile/mobile/mobile/(以下共有数だけ繰り返し)hogehoge.htmlと URLがいくつもある状態になってしまいます。(見れることは見れる) しかもCMS販売会社ではどうにもできないといわれており、 通常ネットを見ても .htaccess でのモバイル振り分けのループ防止策しか 見当たらないので、この場合(PHP上で振り分けている場合)で ディレクトリ再ループ阻止するには何を加えればよいでしょうか。
該当のソースコード
PHP マイナーなCMSです
1 2 $regex_ua_spn = "/(iPhone|iPod|Android.*Mobile|BlackBerry)/"; 3 $viewmode = $device = (preg_match($regex_ua_spn, $_SERVER['HTTP_USER_AGENT']) != 0) ? 'mobile' : 'pc'; 4 5 if (isset($_GET['viewtype'])) { 6 $viewmode = $_GET['viewtype']; 7 setcookie("viewtype", $viewmode, null, "/"); 8 } elseif (@$_COOKIE['viewtype']) { 9 if ($_COOKIE['viewtype'] === 'mobile' && !preg_match('/mobile/', $_SERVER['REQUEST_URI'])) { 10 header("Location: /mobile" .$_SERVER['REQUEST_URI']); 11 exit; 12 } 13 } elseif ($device === 'mobile') { 14 setcookie("viewtype", "mobile", null, "/"); 15 header("Location: /mobile" .$_SERVER['REQUEST_URI']); 16 exit; 17 }
これかと思うのですが、
試したこと
基本Wordpressあたりしかいじっていないのでさっぱりどうしていいかがわかりません
助けていただければ幸いです
※モバイルだとPCアドレス(ルート)に戻してもまた/mobile/アドレスに飛ぶため、
PCサイトのURLに一旦戻して頂いても構わないです。
回答3件
あなたの回答
tips
プレビュー