Chrome で 301 リダイレクトが解除できないときの対処方法

Mac で Google Chrome を使っていてこの問題に遭遇したので書き留めておきたいと思います( Chrome の仕様が原因なので Windows でも発生するはずです)。

問題

Chrome で 301 リダイレクトが行われているページに一度アクセスすると、その後そのページのリダイレクト設定が解除された後も Chrome でアクセスするとリダイレクトが効き続けて強制的にリダイレクトされてしまいます。

原因

原因は、 Chrome が 301 リダイレクトをキャッシュしてしまうことです。 私が個人的に確認したりウェブで他の人の意見を見たりするかぎり、 Safari や Firefox では発生せず Chrome でのみ発生するので Chrome 独自の仕様のようです。

対処方法

リダイレクト情報を Chrome がキャッシュしているために発生しているのでそのキャッシュを削除すれば OK です。

Chrome キャッシュの削除は次の 2 通りの方法で行うことができます。

キャッシュの削除方法その 1: まとめて削除

ひとつめの方法は時間指定でキャッシュをまとめて削除する方法です。

Chrome の設定画面の「 Clear browsing data... 」というところを開いて「 Cookies and other site and plugin data 」という項目にチェックを入れてキャッシュをクリアします。 対象期間は対象ページのキャッシュ( 301 リダイレクトのキャッシュ)が削除されるように適切に設定しましょう。

この画面は設定画面からリンクを辿っていくこともできますが、下記の URL でもアクセス可能です。

chrome://settings/clearBrowserData

ちなみに Chrome 内に現在保存されているキャッシュの一覧は次の URL から確認することができるようです。

chrome://view-http-cache

Chrome のバージョンが古い場合は次の URL になります。

chrome://cache

キャッシュの削除方法その 2: 個別に削除

追記( 2017/03/04 ): こちらの「個別に削除」の方法は Chrome のバージョンアップにより使えなくなったようです。

もうひとつの方法は、個別のページに対してのみキャッシュを削除する方法です。

こちらはショートカットなくはなく、手作業で削除する形になります。 ステップは下記のとおりです。

  1. 新しいタブを開く
  2. Developer Tools (デベロッパーツール)を開く
  3. Developer Tools の設定エリアを開く(本稿執筆時点では、右上の三点のアイコンをクリックして Settings をクリックすれば開きます)
  4. 「 General 」のタブを選択する
  5. 「 Disable cache (while DevTools is open) 」という項目にチェックを入れる
  6. 対象ページを開く
  7. リダイレクト設定が解除されていることを確認
  8. Developer Tools を閉じる

6 のタイミングで古いキャッシュがクリアされるので、その後は通常どおりにアクセスすればリダイレクト設定に悩まされることはなくなります。

1 と 2 のいずれの方法でもよいのでキャッシュを削除すれば OK です。 以上です。

私の場合は、自分で管理している SSL 化サイトをローカル環境に持ってきたときに、本番用の .htaccess を書き換えずにローカルサイトにアクセスしてしまい、リダイレクトがいったん効くと .htaccess を変更しても解除ができずに往生しました(イメージとしては、 https://gotohayato.com というサイトをローカルに持ってきてセットアップして http://gotohayato.localhost でアクセスしようとしたら、常時 s つきの https://gotohayato.localhost にリダイレクトされ続けてしまうようなイメージです)。

SSL 化の場合は HSTS が原因の場合も

ちなみにサイトを SSL 化して http を https にリダイレクトしている場合は、 301 リダイレクト設定の他に HSTS (HTTP Strict Transport Security) の設定でも https にリダイレクトされることがあります。

こちらも有効期限の設定によって http が https にリダイレクトされるのを解除できないことがあるので、その場合は HSTS の設定を削除あるいは有効期限切れになるようにするとよいかと思います。

HSTS の設定の解除方法はブラウザによって異なります。 英語ですが次のページがわかりやすいのでお困りの方は参考にしてみてください。

ちなみに Chrome の場合は次の URL で HSTS の設定ページを開き「 Delete domain 」のところに対象ドメインを入力して「 Delete 」をクリックすれば HSTS の設定をクリアすることができます。

chrome://net-internals/#hsts