先日、表題の通りさくらサーバー上に制作したWEBサイトでサイト内のどのページにアクセスしてもトップに飛ばされてしまうという不具合が急に発生したため、その修正の対応記録です。
どのページにアクセスしても特定のページに飛ばされてしまう場合でも同じような方法で修正できると思います。
状況の把握
とりあえずこのような場合は大雑把に状況を確認し、原因を調査します。
まず状況として確認したのは
- リダイレクトされているか
- どのくらいのページ範囲で起きているのか
- ログになにか表示されていないか
原因による特徴を覚えておけば5分程度の確認で原因がスムーズに絞り込めることもあります。
今回は「ドメイン全体で、トップページにリダイレクトされる」という状況で、残念ながらあまり絞り込めませんでした。
原因の発見・修正
まず、よくある原因の候補としては
- htaccess
- JavaScript
- Php(wordpress)
- Google Tag Manager
- HTML(meta refresh)
辺りだと思います。
今回はあまり絞り込めなかったので、ありがちな順番に怪しい記述を検索して原因を調査します。
よくある原因候補は個人的に原因として多いと思う順に並べています。
中でもhtaccessはかなり原因であることが多い印象で今回もそこに原因がありました。
今回の原因だったのは下記の一文でした。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://sample.com/$1 [R=301,L]
</IfModule>
今回はサイト全体が対象になっていたのでサイト全体をリダイレクト元の対象にする「RewriteRule ^(.*)$
」が怪しいと感じ消去してみたら治りました!
特定のページから・特定のページへ飛ばされる場合はそのページのドメイン以降の文字列(「https://sample.com/〇〇/✕✕」であれば「〇〇/✕✕」)で検索を検索してみると分岐の条件や遷移先になっているかもしれません。
今回の原因は「X-Sakura-Forwarded-For」という変数が使えなくなっていたことで、条件分岐の結果が変わってしまい全ページトップページにリダイレクトされていたようです。
さくらサーバーの古いSSLリダイレクトの記述のようなので、下記の記述に置き換えればOKです!
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
その他原因の発見方法
パッと思いつく原因の解明・絞り込み方法を記述しておくので下記の特徴を覚えておけばきっと役に立つと思います。
言語ごとのリダイレクトの特徴から絞り込み
- ページを開いたあと・表示されたあとにリダイレクト
→ Phpやhtaccessの場合html読み込み前にリダイレクトされるので除外できる - 対象ドメイン内においた空のhtmlファイルでもリダイレクト
→HTMLやJS,Phpの記述がなくても対象範囲のファイルすべてが対象なのでhtaccessが怪しいとわかる - ブラウザの設定からJavaScriptを無効にしてみる
→ リダイレクトされなければJavaScript or タグマネ(タグマネもjavascriptで動作しているため)の可能性大
プロジェクト内で検索して原因の可能性のある記述を確認
- リダイレクトの記述を検索し、分岐の書き方が間違っていないかをチェック。
- 「RewriteRule」 (.htaccess)
- 「location.href」 (JS)
- 「header(’Location:」 (PHP)
- 「http-equiv=”refresh”」 (HTML)
- 特定のページ(トップページ以外)に飛ばされる場合そのURLやドメイン以降を検索。(「https://sample.com/〇〇/✕✕」であれば「〇〇/✕✕」)
原因になっていそうなところを片っ端からコメントアウトしていく
半分をコメントアウトしてみて治ればそのコメントアウト内に、治らなければもう半分に原因があるのでその原因の中の半分をまたコメントアウトして…というのを繰り返す二分探索がおすすめです。
コンソールになにか書いてないか見てみる
「ページが遷移したらコンソール残らないじゃん!」と思う方もいるかも知れませんが、 コンソールを開き赤い矢印から設定を開き、赤い四角の「Preserve log」にチェックを入れることでリロード時にコンソールをクリアせずに残すことができます。
JSでリダイレクトされている場合ヒントが残っている可能性があるのでチェックしてみる価値はあると思います。
ホームページ制作やサイトの管理をする上でよく見る事象なので解決方法は必ず覚えておいたほうが良いでしょう!
■□■□■□■□■□■□■□■□■□■□
営業時間:平日9:00〜18:00
●福岡オフィス
〒810-0042
福岡市中央区赤坂1-12-6 赤坂Sビル2F
TEL:092-726-5550 FAX:092-726-5558
●宮崎出張所
〒880-0001
宮崎県宮崎市橘通西3-10-32
宮崎ナナイロ東館8FATOMica内
⇒ メールでのお問合せ
⇒ ホームページ制作実績
⇒ 会社案内
■□■□■□■□■□■□■□■□■□■□