PHPの301リダイレクトを使用した処理で、ちょっとハマってしまったことがあったので備考録としてメモします。
あるページにアクセスした時にPHPで別のURLにリダイレクトするような処理をしていました。
そのリダイレクト先を新しく作成したページのURLに変更してアクセスした際に前に設定していたURLにリダイレクトされてしまったのです。
設定を確認しても間違っておらず、別のブラウザで確認すると設定したページに正しくリダイレクトされました。
また、ブラウザのシークレットモードでアクセスした場合は新しく設定したURLにリダイレクトされました。
色々調べていくとリダイレクトの処理を301でしていたことが原因で、301リダイレクトをするとリダイレクトの情報をブラウザがキャッシュしてしまい、後で設定を変更したとしても記憶していた情報でリダイレクトされてしまうのです。
301リダイレクトはドメインやURLの恒久的な移動をするときに用いられます。
なので、301リダイレクトをするとブラウザ側でリダイレクトの情報を記憶して、ページの内容を読み込む前にキャッシュの情報でリダイレクトします。
ドメインの変更時や永久的なページの移動であれば301リダイレクトを利用しますが、一時的な転送の場合は302でリダイレクトするべきだと思います。
301リダイレクトで注意する点は一度アクセスしたことのある人がいた場合、その後にリダイレクト先を変更したとしても意図しないページ(前に設定していたURL)に転送されてしまうということです。
つまり、一度でもアクセスしたことのある人は同じブラウザを使用した場合、新しく設定したページを閲覧できない状態になります。
このようなことが起こらないためにもリダイレクト処理をする時には開発時に注意して設定する必要があります。
PHPでリダイレクトする場合はheader関数を使用します。
ステータスコードを指定しなければ、302リダイレクトになります。
永久的な移動する場合のみ301を利用。
1 2 3 4 5 |
// 302 header('Location: http://www.example.com/'); // 301 header('Location: http://www.example.com/', true, 301); |
永久的な移動する場合のみ301リダイレクトを設定し、正しいリダイレクトを設定することが重要です。
ブラウザのキャッシュを消すこと。
ブラウザ(Chrome)のキャッシュを削除すれば、リダイレクトが正しく処理されましたが、Firefoxではキャッシュを消しただけではリダイレクトのキャッシュは消えませんでした。
今回は自分用のメモとして301リダイレクトする時の注意点を記載しました。
PHPではなくても.htaccessでリダイレクト処理をする時なども同じです。
リダイレクトの方法を何も考えずに設定してしまうと後で大変になることがあります。
上記のような場合、ユーザがブラウザのキャッシュで意図しないページにリダイレクトされてしまうことがあるので注意してみてください。
ホームページに関するお悩みは、仙台のホームページ制作アド・エータイプにお任せください!